IE(any)和Firefox中的内存不足错误,当尝试从父文档包含jQuery时

Out of memory error in IE(any) and Firefox when trying to include jQuery from parent document

本文关键字:文档 jQuery 包含 错误 any Firefox 内存不足 IE      更新时间:2023-09-26

我正在动态地将iframe加载到div中。这些 iframe 需要 jQuery 来实现其功能。为了避免将jQuery包含在每个iframe中,我只是在iframe生成器中引用了jQuery(相同的代码将在每个加载的iframe的头部中),如下所示:

var jQuery = window.parent.$;  // The parent is the document that will house the iframes
var $ = jQuery;

这在Chrome中工作得很好,并且仅加载一次jQuery即可大幅提高性能。然而,Firefox 和 IE 都开始疯狂地泄漏内存(两者都在 1gb 内存使用量左右),然后抛出内存不足错误并删除脚本。

编辑:jQuery 1.7和jQueryUI 1.10.3(但是加载iframe时不使用jqUI)

请记住,jQuery保留了一个上下文,该上下文表示在选择时要在其中查找元素的范围。默认上下文是包含 jQuery 的页面的window.document

当引用父帧的 jQuery 全局时,上下文仍将保持父帧的window.document,这意味着您所做的所有选择都将发生在父帧中,这几乎永远不会达到预期的效果。

根据情况(即两个帧的协议、域和端口),由于SOP限制,这可能会导致奇怪的行为。

最好的办法是动态插入引用与子帧中的父级相同的 jQuery 资源的 <script> 标记。浏览器很可能将文件缓存在缓存中。

顺便说一下,@undefined链接的答案作为对你的问题的注释是一个糟糕的主意,因为它只允许字符串选择器正常工作,但不考虑jQuery函数可以采用的所有其他参数类型(例如,绑定到文档onload的函数)。