【问题标题】:How to pass the jQuery object from parent document to a friendly iframe?如何将 jQuery 对象从父文档传递到友好的 iframe?
【发布时间】:2014-07-16 18:51:02
【问题描述】:

我正在尝试开发一个在 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 库 once,而是在初始页面加载以及每次将小部件注入父文档时。虽然这不会阻止父窗口加载,但由于 iframe 是独立加载的,因此这不是预期的结果。我想探索如何在 iframe 中从父级继承和使用 jQuery。

【问题讨论】:

  • 先检查页面右侧的“相关”问题。
  • 我在这里或谷歌上没有找到任何回答我问题的线程。 Casey提到的相关文章是指从父级访问iframe内容。我担心的是从 iframe 访问 jQuery object(在父文档中实例化),而不必在该 iframe 中发出服务器请求。我知道这听起来像是一个在以前在这里和其他地方被问过和回答过很多次的问题,但我向你保证,我浏览了几个相关的线程和谷歌搜索,但没有发现任何相关的
  • 这是您需要的吗? stackoverflow.com/questions/5481613/…
  • @G.Mendes 啊关键字选择的影响; “pass”变成“access”,“object”变成“library”,你会得到一个全新的结果列表。不幸的是,您链接到的帖子提到了我的原始(无效)解决方案作为其最高投票答案。这种方法对我不起作用

标签: javascript jquery iframe


【解决方案1】:

我认为你的假设是错误的

因此不需要每次出现在页面上时都要求 http 请求

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

现在,您不能随意“共享”jQuery 对象的原因是选择器有一个context

用作上下文的 DOM 元素、文档或 jQuery

默认是document(我相信),当您访问父母对象时,默认是已经设置的文档。你应该能够做到:

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

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

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

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

然后你就可以做

$('#elem-in-iframe')

【讨论】:

  • 有趣 - 我会试试这个。你到底指的是什么假设?只是想确保我按照您的意图理解您的回复
  • 假设它每次出现都需要一个http请求——实际上你只有一个http请求,其余的已经被浏览器缓存了,所以它只会使用缓存的版本。
  • 我尝试在 iframe 的代码中尽早记录 jQuery/$ 变量名称,但它未定义。我想这意味着 iframe 的范围不包括其父 jQuery 对象的实例
  • 我想我不是很清楚,你仍然需要导入window.parent.jQuery,然后你可以将它的上下文设置为当前窗口。
  • 经过进一步审查,这似乎按预期工作。但是,我的开发环境更复杂(我将使用此信息更新我的原始问题)......在某些时候,iframe 中存在的“jQuery”对象作为参数传递给 IIFE,“$”作为相关论点。正是在这一点上,jQuery 库停止按预期工作。我不明白为什么
猜你喜欢
  • 2014-12-13
  • 2010-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多