Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将jQuery对象从父文档传递到友好的iframe?_Javascript_Jquery_Iframe - Fatal编程技术网

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

Javascript 如何将jQuery对象从父文档传递到友好的iframe?,javascript,jquery,iframe,Javascript,Jquery,Iframe,我正在尝试开发一个交互式小部件,它在iframe中利用jQuery,但依赖于父文档中已经存在的jQuery对象,而不是为自己的jQuery实例发出额外的服务器请求。这一点很重要,因为小部件将在一个页面上多次加载到父文档中,因此不希望每次出现在页面上时都需要http请求。相反,我希望传递父级的jQuery对象实例(我确信它将在父级文档中可用)以在iframe中使用 理解到这是一个“友好的”iframe(即允许与父文档公开通信),我认为它将简单到: window.jQuery = window.pa

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

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

window.jQuery = window.parent.jQuery;
虽然这似乎提供了jQuery名称空间,使其在iframe中可用(并且记录此名称空间会显示预期的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库,而是在初始页面加载时以及每次将小部件注入父文档时加载jQuery库。虽然这不会禁止加载父窗口,但由于iframe是独立加载的,因此这不是期望的结果。我想探讨如何在iframe中从父代继承和使用jQuery。

我认为您的假设是错误的

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

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

现在,您不能按照自己的意愿“共享”jQuery对象的原因是选择器有一个

用作上下文的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')

首先,可能重复检查页面右侧的“相关”问题。我在这里或谷歌上没有找到任何回答我问题的线索。Casey提到的相关文章涉及从父级访问iframe内容。我关心的是从iframe访问jQuery对象(在父文档中实例化),而不必在该iframe中发出服务器请求。我知道这听起来像是一个在这里和其他地方被问过很多次的问题,但我向你保证,我通过几个相关的线程和谷歌搜索,没有发现任何相关的东西。这是你需要的吗@G.Mendes Ah关键词选择的影响;“pass”变成“access”,“object”变成“library”,您将得到一个全新的结果列表。不幸的是,你链接到的帖子提到了我最初的(不起作用的)解决方案,作为它的首选答案。这种方法对我的兴趣不起作用——我会试试这个。你到底指的是什么假设?为了确保我理解您的响应,假设每次出现都需要一个http请求,实际上您只有一个http请求,其余的都已经被浏览器缓存了,因此它将只使用缓存的版本。我尝试在iframe的代码中记录jQuery/$变量名,但它没有定义。我想这意味着iframe的作用域不包括其父对象jQuery的实例。我想我不清楚,您仍然需要导入
window.parent.jQuery
,然后您可以将其上下文设置为当前窗口。进一步检查后,这似乎可以按预期工作。然而,我的开发环境更复杂(我将用这些信息更新我的原始问题)。。。在某个时刻,iframe中存在的“jQuery”对象作为参数传递到IIFE中,其中“$”作为关联参数。正是在这一点上,jQuery库停止了预期的工作。我不明白为什么