扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:dxaw 来源:赛迪网技术社区 2007年11月9日
关键字: 方法解析 JavaScript 浏览器
一、 基本的JavaScript 开发环境 JavaScript Reference与JavaScript API: JavaScript Reference是用于建立包含JavaScript runtime的Library或 DLL,然后编译成小的 "shell" 程序,连接Library后生成交互式的JavaScript解释器,也可以用来解释.js 文件。 该程序不依赖Navigator代码。 生成的"shell" 程序,对比浏览器对JavaScript的支持,相同之处是使用相同的包含JavaScript runtime的Library 或 DLL,我们把这部份相同的Library或 DLL称为JavaScript API,我们实际开发JavaScript应用,也是在JavaScript API基础上工作,而不用过多考虑其内部的实现。关于JavaScript API,参见JavaScript API详解。 二、 JavaScript Engine JavaScript Engine用于初始化JavaScript环境,提供对JavaScript解释、执行的接口。 初始化主要包括: 内存分配:rt=JS_Init(10000L); 初始化cx:cx = JS_NewContext(rt, STACK_CHUNK_SIZE); 初始化globalObj:globalObj = JS_NewObject(cx, &globalClass, 0, 0); 定义标准类:JS_InitStandardClasses(cx, globalObj); 定义系统函数:JS_DefineFunctions(cx, globalObj, g_functions); 定义报错函数:JS_SetErrorReporter(cx,JS_ErrorReporter); 注册其它类: RegisterClassPoint(cx,globalObj); RegisterClassSize(cx,globalObj); RegisterClassRect(cx,globalObj); RegisterClassPolygon (cx,globalObj); RegisterClassColorKey (cx,globalObj); RegisterClassTDTimer (cx,globalObj); 初始化定时器:TDTimerListInit(); 提供对JavaScript解释、执行的接口函数: TD_EvaluateScript(JSContext *cx, JSObject *obj, const char *bytes, uintN length, const char *filename, uintN lineno, jsval *rval) 三、 JavaScript与浏览器接合 基本概念:JavaScript操作HTML元素的常见方式 例:
当鼠标移到文字上时,触发事件mouseover,调用ChangeImage()函数,结果为图像源(SRC)发生变化,重新调入新图片。 由此产生两个关键问题: 1. Javascript如何获取HTML元素的名称和属性。 2. Javascript如何改变HTML元素的属性,并操作WIDGET重画。 下面分别阐述这两个问题: 首先介绍涉及到的浏览器流程: Tokenize -> BuildModel -> ProcessElement -> WidgetPaint --------------------- ---------------------------- | | parse layout
问题1解决:HTML元素作为Javascript对象进行注册。 注册过程在BuildModel中进行。 BuildModel的首要任务是将Token后的结点按包含关系展成一棵树。 其次就是要将某些结点注册为JavaScript对象。 注册的过程是: 定义新对象:JSObject *proto; 初始化该对象:TD_JSXMLElementClassInit(JS_GetGlobalContext(), (void **)&proto)) 使用JS_DefineObject或JS_NewObject定义对象属性: 根据是否定义了该元素的名称区别对待:
将对象加入: JS_SetPrivate(JS_GetGlobalContext(), (JSObject *)*aReturn, aElement); 这样,在编译时,HTML元素的标识就能被Javascript编译器识别,否则会报错变量未定义。 问题2解决:利用注册给对象的函数实现操作符的功能化。 具体可理解为: 当image0.src ="1.gif"被执行时,相当于为对象设置或改变属性,此时SetElementProperty函数被调用(该函数在注册该对象时由 JSXMLElementClassInit捆绑给该对象,其内容由用户自己定义),SetElementProperty通过函数指针调用函数 TD_JSXMLSetAtrByID,改变结点树上结点属性,并重新生成该节点对应的widget,重画界面。 问题:如何建立Javascript对象与结点树上结点的对应? 答: Javascript对象与结点树是同时生成的,它们的共同性质是结点具有相同属性,Javascript对象根据ID属性查找树,找到要操作的对应结点。 四、 浏览器消息响应 在主消息循环中调用TDWidgetProcessMsg,处理与widget有关消息。 首先:取得当前焦点所在的widgetpWidget=TDWidgetGetAtPoint(pThis->baseDoc.base.mWidget,pt,&index); 处理该widget对该消息的响应。 最后一般为调用javascript执行,实现实际响应。
|
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。