如何动态添加Javascript函数(并调用)

时间:2010-06-10 12:57:26

标签: javascript ajax dynamic-loading

根据页面上的点击事件,通过ajax我获取一个html和脚本块,我可以获取脚本元素并将其附加到head元素,但是基于WebKit的浏览器不会将其视为脚本(即。我无法调用附加脚本中声明的函数。

使用Chrome开发者工具我可以看到我的脚本节点确实存在,但它显示的方式不同于未动态添加的脚本块,非动态脚本具有文本子元素,我无法弄清楚为动态脚本复制此方法的方法。

有任何想法或更好的方法吗?除非用户点击特定选项卡,否则可能会有很多html和脚本可能永远不需要,在这种情况下,相关内容(和脚本)将被加载。谢谢!

3 个答案:

答案 0 :(得分:2)

您可以尝试使用jQuery ...它提供了一个名为.getScript的方法,它将以正确的方式动态加载JavaScript。它适用于所有知名浏览器。

答案 1 :(得分:1)

如何在从服务器收到的内容上调用eval()?当然,您必须切断<script></script>部分。

答案 2 :(得分:0)

如果您正在使用像jQuery这样的库,那么只需使用内置方法即可。

否则你需要将它附加到文档而不是像这样的头部:

document.write("<scr" + "ipt type=\"text/javascript\" src=\"http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js\"></scr" + "ipt>");

老实说,我不知道为什么脚本标签会像那样被剪切,但很多例子都是这样做的,所以可能有充分的理由。

您还需要考虑加载脚本可能需要一段时间的事实,因此在将此附加到正文后,您应该设置一个计时器来检查脚本是否已加载。这可以通过对脚本导出的任何全局变量进行简单的类型检查来实现。

或者你可以在实际的javascript体上做一个eval(),但可能会有一些警告。

一般来说,我会将此类内容留给浏览器缓存,只需在选项卡所在的页面上加载javascript即可。只是尽量不要使用任何onload事件,而是在显示选项卡时调用所需的任何初始值设定项。