浏览 6618 次
锁定老帖子 主题:多个类在同一个文件中的JS
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2005-06-21
//-------Source of CalendarPopup.js-------------- function CalendarPopup();{...} ... //-------Source of PopupWindow.js------- function PopupWindow();{...} ... ...... 我希望在b.js中包含该类,所以使用了JSPackaging的JSLoad()和直接如下 document.write("<scr"+"ipt src=a.js></scr"+"ipt>");; 等方法。 在b.js中,调用方法入下: var bd_cal = new CalendarPopup("calendarDiv");; 结果总是报CalendarPopup未定义错误,只能把a.js的内容全拷贝到b.js中才能使用,对于其他没有这种多类的情况,使用包含进来可以直接使用。这种一个文件包含多个类,是否有特殊的new方法?请高手赐教,这个问题搞的头大死了。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2005-06-21
document.write("<scr"+"ipt src=a.js></scr"+"ipt>"); 为什么一定要使用这样间接的方式呢?为什么不直接将 a.js 包含在 html 文件中呢? 你要仔细看一下我贴的这个例子,实际上即使在 a.js 中只有一个类的时候,如果你直接在上面这一句之后调用 new CalendarPopup() 也会发生同样的错误。但是在 body 的 onload 事件函数内调用就没有问题了。 这说明什么呢?这说明浏览器解析你通过 document.write 包含进来的 JS 不是同步的。到执行下一条语句的时候,浏览器的解析工作还没有完成。你遇到的不同情况(一个类和两个类)完全取决于你的机器的性能,当然你不能依赖这种偶然的行为。 |
|
返回顶楼 | |
发表时间:2005-06-21
dlee 写道 document.write("<scr"+"ipt src=a.js></scr"+"ipt>"); 为什么一定要使用这样间接的方式呢?为什么不直接将 a.js 包含在 html 文件中呢? 有可能他的html是document.write出来的。 |
|
返回顶楼 | |
发表时间:2005-06-21
jkit 写道 dlee 写道 document.write("<scr"+"ipt src=a.js></scr"+"ipt>"); 为什么一定要使用这样间接的方式呢?为什么不直接将 a.js 包含在 html 文件中呢? 有可能他的html是document.write出来的。 我现在的问题是需要生成一个JS文件,把一个比较复杂的搜索表单用JS打印,这样,其他网站可以直接<script src...>来使用我这个表单。 使用Iframe的方式方便,但是老板要求我使用这样的解决方案,因为该表单包含了好几个JS文件,里面还嵌了一些JS代码,所以我希望这样包含的JS也能包含在我写的这个JS中。我使用过JSPackaging,但是对于我说的这个JS文件不行,错误同我的主题帖,现在我只能把这个JS的内容完全拷贝到我的JS文件中,但是老板说这个文件可能会变,所以我想包含是最好的办法。 关于错误,有可能是该JS包含了2个以上的类PopupWindow和CalendarPopup,如果使用HTML的包含是可以的,但是在JS包含中,似乎所有的包含JS是在该JS完全解析过后在有效,就象Dlee所说的,所以说,如果有些JS下载比较慢,很可能就出现错误了。 |
|
返回顶楼 | |
发表时间:2005-06-21
a.js(其实是一个xml文件):
<?xml version="1.0" encoding="gb2312"?> <scripts> function testA();{ } var _p=testA.prototype; _p.say=function(str);{ alert("str");; } </scripts> b.js(导入a.js,并且调用方法a.js的方法,我写的只适用IE,原理是利用xmlHttp,然后利用eval函数): var doc=new ActiveXObject("MSXML");; doc.url="a.js"; eval(doc.root.text);; function testB();{ var t=new testA();; t.say("Hello!");; }; testB();; 测试页面: <html> <head> <script language="JavaScript" src="b.js"></script> </head> <body> <script language="JavaScript"> //testB();; </script> </body> </html> 显示是为了实现而实现,这种方法好别扭 附件是源文件. |
|
返回顶楼 | |
发表时间:2005-06-21
主要代码(b.js,提供者robot_liu,判断一下浏览器状态)
document.onreadystatechange=fnStartInit; function fnStartInit();{ if(document.readyState=="complete");{ var t=new testA();; t.say("Hello!");; } }; document.write("<scr"+"ipt src=a.js></scr"+"ipt>");; 附源文件 |
|
返回顶楼 | |
发表时间:2005-06-21
似乎和Javascript的特性有关,如果直接在HTML中使用script src来loading的脚本,都是可以马上使用的,但是如果在JS中使用任何方法include进来的脚本,都需要等该JS loading完毕后才loading,和Dlee说的完全一样,看来我的想法很难实现了。
|
|
返回顶楼 | |
发表时间:2005-06-22
以下是我们所使用的方式,使用XMLHTTP来获取源文件,然后载入,不知道是不是合你的口味,呵呵:
// /********************加载外部JS文件开始*************************/ // var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");; //加载cookie工具 // xmlhttp.open("get", _baseurl+"cookieSet.js", false);; // xmlhttp.send();; // var externalJS=xmlhttp.responseText; // window.execScript(externalJS);; |
|
返回顶楼 | |
发表时间:2005-06-24
多谢谢,我试下,看能否作为参考解决方案。
|
|
返回顶楼 | |