接触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对象已经生成,并在之后刷新页面上的数据使之显示出来?谢谢大家

解决方案 »

  1.   

    你在执行document.write的时候,并没有加载那个JS文件
     所以那一行会报错
      

  2.   

    1.js加载后类似我在js文件中的A对象是否已经生成了?    是的
    2.如果js加载后A对象已经生成,不会自动引发刷新吗?    不会
    3.如果不会引发自动刷新,应如何判断js加载完成A对象已经生成,并在之后刷新页面上的数据使之显示出来?
    点击事件发生后,立一个FLAG来判断。
      刷新会unload页面,也就是说,刷新后,你的那个A对象便不存在了。 一切跟你刚访问时一样
      

  3.   

    恩,需求是这样子的:
    客户有一个页面,上面有很多客户自定义的js标签和函数,类似"A.func()"之类的,用以获取信息及控制行为,客户只是定义但没有实现它们。
    我要在我的应用里访问这个页面,首先我写一个js文件实现这些自定义的东西,然后再访问这个页面后动态加载我的js,好让页面上的这些自定义东西有意义。
    这个需求可以实现吗?
      

  4.   

    你必须让你的js文件先执行,客户才能使用你的函数。
    试想一个js函数都没有编译执行,其他的脚本怎么能调用这个函数呢。
      

  5.   

    这个需求可以实现,不过楼主的思路好像稍微有些偏。
    建议如下:页面上调用预定义的接口通过如下的方法:
    obj.method && obj.method(); // 当存在某方法的时候,就去调用它。上面是一个简写法,展开成容易理解的写法就是:
    if (obj.method != null) {
        obj.method();
    }动态加载脚本的过程可以按照楼主的方法实现。
    不过要明白,动态加载脚本后,页面只会执行一次刚刚新加载的脚本,之前已经加载执行过的脚本不会重复执行。
    那如何去调用动态加载脚本中的函数呢?
    一种情况就是,这些函数会在适当的时候被调用的,你不需要担心,比如按钮的onclick事件等等。
    再一种情况就是,如果你希望加载后立即执行,那么就在新加载的脚本尾部,添加要立即执行的代码,它自然会在脚本加载完成后一并立即执行。
      

  6.   

    多谢各位朋友的帮助,已经搞清楚了,总结一下,按照网页加载的时间顺序:1. 1楼网页被浏览器加载后,“document.write("A.func() return : " + A.func());”这里因为没有js函数“A.func()”的实现会出错,视浏览器处理及设置不同有的可能会有alert消息框,有的则仅仅是不显示。可以通过“A.func && A.func()”方法调用js函数来避免调用错误。
    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文件加载完成后功能即可正常实现。以上,为以后有需要的朋友参考。再次感谢各位朋友的帮助,结贴了。