论坛首页 Web前端技术论坛

多个类在同一个文件中的JS

浏览 6618 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2005-06-21  
现有如下被引入的类a.js

//-------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方法?请高手赐教,这个问题搞的头大死了。
   发表时间:2005-06-21  
document.write("&lt;scr"+"ipt src=a.js&gt;&lt;/scr"+"ipt&gt;");

为什么一定要使用这样间接的方式呢?为什么不直接将 a.js 包含在 html 文件中呢?
你要仔细看一下我贴的这个例子,实际上即使在 a.js 中只有一个类的时候,如果你直接在上面这一句之后调用 new CalendarPopup() 也会发生同样的错误。但是在 body 的 onload 事件函数内调用就没有问题了。

这说明什么呢?这说明浏览器解析你通过 document.write 包含进来的 JS 不是同步的。到执行下一条语句的时候,浏览器的解析工作还没有完成。你遇到的不同情况(一个类和两个类)完全取决于你的机器的性能,当然你不能依赖这种偶然的行为。
0 请登录后投票
   发表时间:2005-06-21  
dlee 写道
document.write("&lt;scr"+"ipt src=a.js&gt;&lt;/scr"+"ipt&gt;");

为什么一定要使用这样间接的方式呢?为什么不直接将 a.js 包含在 html 文件中呢?


有可能他的html是document.write出来的。
0 请登录后投票
   发表时间:2005-06-21  
jkit 写道
dlee 写道
document.write("&lt;scr"+"ipt src=a.js&gt;&lt;/scr"+"ipt&gt;");

为什么一定要使用这样间接的方式呢?为什么不直接将 a.js 包含在 html 文件中呢?


有可能他的html是document.write出来的。


我现在的问题是需要生成一个JS文件,把一个比较复杂的搜索表单用JS打印,这样,其他网站可以直接&lt;script src...&gt;来使用我这个表单。

使用Iframe的方式方便,但是老板要求我使用这样的解决方案,因为该表单包含了好几个JS文件,里面还嵌了一些JS代码,所以我希望这样包含的JS也能包含在我写的这个JS中。我使用过JSPackaging,但是对于我说的这个JS文件不行,错误同我的主题帖,现在我只能把这个JS的内容完全拷贝到我的JS文件中,但是老板说这个文件可能会变,所以我想包含是最好的办法。

关于错误,有可能是该JS包含了2个以上的类PopupWindow和CalendarPopup,如果使用HTML的包含是可以的,但是在JS包含中,似乎所有的包含JS是在该JS完全解析过后在有效,就象Dlee所说的,所以说,如果有些JS下载比较慢,很可能就出现错误了。
0 请登录后投票
   发表时间: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>


显示是为了实现而实现,这种方法好别扭

附件是源文件.
0 请登录后投票
   发表时间: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>");;


附源文件
0 请登录后投票
   发表时间:2005-06-21  
似乎和Javascript的特性有关,如果直接在HTML中使用script src来loading的脚本,都是可以马上使用的,但是如果在JS中使用任何方法include进来的脚本,都需要等该JS loading完毕后才loading,和Dlee说的完全一样,看来我的想法很难实现了。
0 请登录后投票
   发表时间: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);;
0 请登录后投票
   发表时间:2005-06-24  
多谢谢,我试下,看能否作为参考解决方案。
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics