javascript - 如何将 jQuery 对象从父文档传递到友好的 iframe?

标签 javascript jquery iframe

我正在尝试开发一个在 iframe 中使用 jQuery 的交互式小部件,但依赖于父文档中已存在的 jQuery 对象,而不是为其自己的 jQuery 实例发出额外的服务器请求。这很重要,因为小部件将在页面上多次加载到父文档中 - 因此每次出现在页面上时都需要 http 请求,这是不希望的。相反,我想传递父级的 jQuery 对象实例(我确信它将在父级文档中可用)以在 iframe 中使用。

了解这是一个“友好”的 iframe(即允许与父文档公开通信),我认为它会很简单:

window.jQuery = window.parent.jQuery;

虽然这似乎提供了在 iframe 中可用的 jQuery 命名空间(并且记录此命名空间会显示预期的 jQuery 函数字符串),但它似乎无法引用 iframe 中的元素。例如:

window.jQuery = window.parent.jQuery;
console.log(jQuery); // logs: function (e,t){return new w.fn.init(e,t,r)}
console.log(jQuery('#elem-in-iframe')); // logs: []

因此,从父文档传递到 iframe 的 jQuery 对象似乎仍然受到父文档范围的限制。

最终,我不得不在页面上加载的每个 iframe 中创建一个独立的 jQuery 实例 - 因此,不是在初始页面加载时加载 jQuery 库一次,而是在初始页面加载以及每次将小部件注入(inject)父文档时。虽然这不会阻止父窗口加载,但由于 iframe 独立加载,但这不是所需的结果。我想探索如何在 iframe 中从父级继承和使用 jQuery。

最佳答案

我认为你的假设是错误的

therefore requiring an http request each time it appears on the page is not desired

只要浏览器从同一 URL 获取 jQuery,它就会被缓存。这基本上是一个免费请求。

现在,您无法按需要“共享”jQuery 对象的原因是选择器有一个 context

A DOM Element, Document, or jQuery to use as context

默认值是document(我相信),当您访问父对象时,它的默认值是已经设置的文档。您应该能够执行以下操作:

window.jQuery = window.parent.jQuery;
jQuery('#elem-in-iframe', document)

在iframe中传入iframes窗口作为上下文,然后理论上应该可以工作。

您甚至可以在 iframe 中执行此操作:

window.jQuery = window.parent.jQuery;
$ = jQuery(document);

然后你就可以这样做

$('#elem-in-iframe')

关于javascript - 如何将 jQuery 对象从父文档传递到友好的 iframe?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24788452/

相关文章:

javascript - 检查坐标是否在扇区内

javascript - 主干获取点击元素的模型

javascript - 使用 jQuery 对解析数据进行排序

javascript - 使用 JS window.print() 中断 chrome 中的后退按钮

javascript - 下面的 JavaScript 函数代码中 '$(this)' 包含什么?

jquery - jquery中奇怪的滑动效果

javascript - 如何在 bpmn.js 中导出 BPMN 2.0 xml 格式

javascript - 如何使放置在 IFRAME 内的链接在父窗口中打开

javascript - 使用 jQuery.append 插入 iframe 的内容后消失

javascript - 删除 Recaptcha 的 iframe 上的 frameborder 属性