2

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

使用 Chrome 开发人员工具,我可以看到我的脚本节点确实存在,但它的显示方式与未动态添加的脚本块不同,非动态脚本具有文本子元素,我无法找到复制的方法这是动态脚本。

有什么想法或更好的方法可以做到这一点吗?驱动力是,除非用户单击特定选项卡,否则可能永远不需要大量 html 和脚本,在这种情况下,相关内容(和脚本)将被加载。谢谢!

4

3 回答 3

2

您可以尝试使用 jQuery……它提供了一个名为.getScript的方法,该方法将以正确的方式动态加载 JavaScript。它在所有知名浏览器中都能正常工作。

于 2010-06-10T13:01:12.373 回答
1

调用eval()从服务器接收到的内容怎么样?当然,你必须切断<script></script>部分。

于 2010-06-10T13:03:05.210 回答
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>");

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

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

或者您可以在实际的 javascript 主体上执行 eval(),但可能会有一些警告。

不过一般来说,我会把这种事情留给浏览器缓存,然后在你的标签所在的页面上加载 javascript。尽量不要使用任何 onload 事件,而是在显示选项卡时调用所需的任何初始化程序。

于 2010-06-10T13:12:02.353 回答