接触js时间不长,提的这个问题应该很基础,但是在论坛里却找不到,请各位老鸟不吝赐教。代码如下
====demo.html====
<html>
<head>
</head>
<body>
<p>Test Begin</p>
<script type="text/javascript">
document.write("A.func() return : " + A.func());
</script>
<p>Test End</p> <a onClick="javascript:void((function(){var e=document.createElement('script');e.setAttribute
('src','demo.js');document.body.appendChild(e);})())">
<div style="width:80px;
margin:0px auto;
padding:10px;
text-align:center;
border:2px solid #202020;" >
Click me!
</div>
</a>
</body>
</html>====demo.js====
function AClass()
{
this.func = function() { return "I'm OK"; }
}
A = new AClass();点击“Click me!”区域后,demo.js被加载,页面却依然不会显示“A.func() return : I'm OK”。
我的问题是:
1.js加载后类似我在js文件中的A对象是否已经生成了?
2.如果js加载后A对象已经生成,不会自动引发刷新吗?
3.如果不会引发自动刷新,应如何判断js加载完成A对象已经生成,并在之后刷新页面上的数据使之显示出来?谢谢大家
====demo.html====
<html>
<head>
</head>
<body>
<p>Test Begin</p>
<script type="text/javascript">
document.write("A.func() return : " + A.func());
</script>
<p>Test End</p> <a onClick="javascript:void((function(){var e=document.createElement('script');e.setAttribute
('src','demo.js');document.body.appendChild(e);})())">
<div style="width:80px;
margin:0px auto;
padding:10px;
text-align:center;
border:2px solid #202020;" >
Click me!
</div>
</a>
</body>
</html>====demo.js====
function AClass()
{
this.func = function() { return "I'm OK"; }
}
A = new AClass();点击“Click me!”区域后,demo.js被加载,页面却依然不会显示“A.func() return : I'm OK”。
我的问题是:
1.js加载后类似我在js文件中的A对象是否已经生成了?
2.如果js加载后A对象已经生成,不会自动引发刷新吗?
3.如果不会引发自动刷新,应如何判断js加载完成A对象已经生成,并在之后刷新页面上的数据使之显示出来?谢谢大家
所以那一行会报错
2.如果js加载后A对象已经生成,不会自动引发刷新吗? 不会
3.如果不会引发自动刷新,应如何判断js加载完成A对象已经生成,并在之后刷新页面上的数据使之显示出来?
点击事件发生后,立一个FLAG来判断。
刷新会unload页面,也就是说,刷新后,你的那个A对象便不存在了。 一切跟你刚访问时一样
客户有一个页面,上面有很多客户自定义的js标签和函数,类似"A.func()"之类的,用以获取信息及控制行为,客户只是定义但没有实现它们。
我要在我的应用里访问这个页面,首先我写一个js文件实现这些自定义的东西,然后再访问这个页面后动态加载我的js,好让页面上的这些自定义东西有意义。
这个需求可以实现吗?
试想一个js函数都没有编译执行,其他的脚本怎么能调用这个函数呢。
建议如下:页面上调用预定义的接口通过如下的方法:
obj.method && obj.method(); // 当存在某方法的时候,就去调用它。上面是一个简写法,展开成容易理解的写法就是:
if (obj.method != null) {
obj.method();
}动态加载脚本的过程可以按照楼主的方法实现。
不过要明白,动态加载脚本后,页面只会执行一次刚刚新加载的脚本,之前已经加载执行过的脚本不会重复执行。
那如何去调用动态加载脚本中的函数呢?
一种情况就是,这些函数会在适当的时候被调用的,你不需要担心,比如按钮的onclick事件等等。
再一种情况就是,如果你希望加载后立即执行,那么就在新加载的脚本尾部,添加要立即执行的代码,它自然会在脚本加载完成后一并立即执行。
2. 网页加载完毕后,点击“Click me!”动态加载js文件,事实上是在内存中的网页文档中添加“<script src="demo.js"></script>”这样一个element,引发浏览器load该js文件并执行。
3. 执行完成后该js文件中的js对象已经生成并保存于内存中,但网页上原有使用这些js对象的element早在加载js文件前已经分析并显示完成,刚刚生成的js对象不会对它们产生作用,因此如“document.write("A.func() return : " + A.func());”这种操作仍然不会起作用绘出文字。
4. 如果希望js文件加载完成后立即执行“A.func()”可以在js文件的最后附加该函数的调用。如果是页面上已有的在某事件(如onclick)发生后调用该函数,则在js文件加载完成后功能即可正常实现。以上,为以后有需要的朋友参考。再次感谢各位朋友的帮助,结贴了。