4

我正在将 iframe 动态加载到 div 中。这些 iframe 的功能需要 jQuery。为了避免在每个 iframe 中包含 jQuery,我只是在 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)

4

1 回答 1

1

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

当引用父框架的 jQuery 全局时,上下文仍然是父框架的window.document,这意味着您所做的所有选择都将发生在父框架中,这几乎不是预期的效果。

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

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

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

于 2013-09-23T10:05:41.353 回答