什么时候由jQuery / Ajax加载的DOM脚本实际执行了?

好吧,我觉得有点愚蠢不得不问这个。 在类似的问题上有任意数量的点击,但我似乎无法做到正确。 如果我通过jQuery / Ajax修改DOM,何时加载的脚本实际被解析/执行?

以下代码适用于F / F,但不适用于Chrome或Opera。 ‘Working’意味着它执行’do_init()’而不会出错。 加载的脚本(实际上是一个svg文件;’file.svg’)定义了’do_init()’(在’静态’脚本中)所需的许多变量。 这些变量对F / F是可见的,但对Chrome或Opera不可见(“变量xxx未定义”)。 在所有3种情况下,文件/脚本都正确加载到DOM中,并且包含 ,其中包含

我可以通过重新安排代码在Opera(或F / F中断)中使用它(svg显示),但不能在Chrome中使用。 使用.success和.complete没有任何区别。

谢谢。

  ...      

编辑1

事实certificate,它们从未被执行过 – 至少在IE9,FF8,Chrome,Opera和Safari中。 它们在FF7 执行。 我刚刚编写了一个最小的测试页面来执行脚本的Ajax加载,这只是一个警报。 这仅显示FF7中的警报。 我也尝试过包含在的脚本,这没什么区别。

这是为什么建议您在文档的末尾,在正文的末尾找到javascript的部分原因。

通常,javascript会在遇到时执行; 如果你把它放在文档的顶部,它将在加载过程的早期运行,如果位于最后,则会延迟。 但是,当使用库的“onLoad”或“domReady”function时,您将执行推迟到以后的时间。

有关更多信息,请参阅jQuery文档: http : //api.jquery.com/ready/

虽然JavaScript在呈现页面时提供了用于执行代码的加载事件,但在完全接收到所有资产(如图像)之前,不会触发此事件。 在大多数情况下,只要完全构造DOM层次结构,就可以运行脚本。 传递给.ready()的处理程序保证在DOM准备好后执行,因此这通常是附加所有其他事件处理程序并运行其他jQuery代码的最佳位置。 使用依赖于CSS样式属性值的脚本时,在引用脚本之前引用外部样式表或嵌入样式元素很重要。

编辑我误读了你的问题的细节。 立即解析动态加载的脚本,但是onLoad事件可能(或可能不会)根据加载的脚本的HTTP传输方面而不是解释加载的脚本来触发。 通常情况下,这很好(虽然有些浏览器无法可靠地触发事件 – IE,看着你),但是你所追求的时间不是在获取脚本时,而是在实际解析并激活时。 这些应该在几毫秒内,通常使差异无意义。

解决这一技术的问题有一些不同,其中一些在这里和这里都有讨论 – 但似乎没有人特别提到Chrome是麻烦的来源。 也就是说,建议的包含脚本轮询的方法(通过超时)似乎是最不容易出错的建议,尽管它也是我最不喜欢的解决方案。