【问题标题】:How can I inject a Jquery object from a parent iframe to an embedded iframe?如何将 Jquery 对象从父 iframe 注入到嵌入式 iframe?
【发布时间】:2012-05-02 02:02:37
【问题描述】:

我在网页中嵌入了一个 iframe,我想在这个框架中注入 jquery。

我尝试了类似的方法:

frame.contentWindow.$ = window.$

虽然这可行,但 iframe 的 $ 仍然在父级范围内运行,而不是其自己的独立副本。

有没有办法在 iframe 中注入一个独立的 jquery 对象而不在框架中注入 <script src="/path/to/jquery.js"></script>

更新

解决了。 jquery.js 通过在匿名函数中接受 window 对象方便地为范围定义 jQuery:

function(windowObject){ .... define jquery }(window)

所以我所要做的就是给这个函数命名,例如j查询并为父窗口对象调用一次,然后为子窗口对象调用一次。

jQuerify = function(windowObject){ .... define jquery }
jQuerify(window)
jQuerify(iframe.contentWindow)

【问题讨论】:

  • 为什么不直接注入脚本标签呢?它将从缓存中加载。您需要它在加载时从头开始运行,以便它在新的上下文中重新初始化。
  • 您也可以查看api.jquery.com/jQuery.sub。请注意,.sub() 是自 1.7.0 以来的插件
  • @jfriend00 我为我的 jquery 提供了许多其他库。那个文件超级重。我不希望 iframe 处理所有这些 javascript。
  • @jAndy 子文档说子方法仍然调用原始 jquery 对象。
  • 我有消息要告诉你。如果你想要一个新的 jQuery 实例,你必须加载一个新的 jQuery 实例。如果您只想要 jQuery 而不是父框架正在使用的所有其他内容,那么只需将您需要的内容放入 iframe 中。这里没有秘密答案。将您需要的脚本放入 iframe 中。

标签: javascript jquery


【解决方案1】:

解决了。 jquery.js 通过在匿名函数中接受窗口对象方便地为范围定义 jQuery:

function(windowObject){ .... 定义 jquery }(window) 所以我所要做的就是给这个函数命名,例如j查询并为父窗口对象调用一次,然后为子窗口对象调用一次。

jQuerify = function(windowObject){ .... define jquery }
jQuerify(window)
jQuerify(iframe.contentWindow)

【讨论】:

    【解决方案2】:

    您可以尝试克隆 jQuery 对象:

    See this answerthis one 了解如何实现 .clone 函数,然后调用:

    iframe.contentWindow.$ = window.$.clone();
    

    iframe.contentWindow.$ = window.$.bind({});
    

    ...取决于您选择如何克隆函数。

    【讨论】:

    • 谢谢杰夫。不幸的是,克隆不会改变范围。不过我找到了解决方案。
    猜你喜欢
    • 1970-01-01
    • 2011-12-13
    • 2016-10-09
    • 2018-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-19
    相关资源
    最近更新 更多