【问题标题】:Run Javascript in iFrame context在 iFrame 上下文中运行 Javascript
【发布时间】:2015-07-15 19:50:18
【问题描述】:

我正在尝试在网页中运行一个脚本,该脚本应该在 <iframe> 中执行。现在我可以调用在<iframe> 中设置的函数。我只是在运行<iframe> 上下文的脚本时遇到问题。

这是我运行<iframe>中设置的函数的方法

$('#iframe').get(0).contentWindow.performSearch();

现在我不想调用preformSearch 函数,而是希望运行一个脚本——在本例中,这就是脚本...

console.log('worked!');

我的实际脚本很大,所以我不会把它放在这里——为了这个问题。

那么,有没有办法通过<iframe> 的上下文运行该脚本?例如,我的第一个猜测是/是..

$('#iframe').get(0).contentWindow.function(){
 console.log('worked!');
}

不过,我之前从未通过<iframe> 之类的方式处理过运行函数,所以我很难过。

提前感谢您的帮助!

注意我正在使用 NW.js (Node-Webkit) 来删除所有 <iframe> 限制。

注意 v2 preformSearch() 函数只是对我如何在框架中调用函数的一个参考。

【问题讨论】:

  • 函数使用jQuery吗?如果是这样就不能真正将函数直接绑定到新窗口,否则iframeWindow.jQuery 将是未定义的。但可以轻松地将window 作为函数参数传递....显示函数本身的示例
  • 您必须将performSearch 作为 iframe 所来自的页面上的一个函数才能正常工作。
  • 您必须将performSearch 作为 iframe 所来自的页面上的一个函数才能正常工作。
  • 该函数有效,但这只是一个关于如何将函数调用到<iframe> 的示例。我现在试图插入一个脚本,而不是一个函数。 (<iframe> 正在查看的页面上已经设置了 preformSearch,我的新代码没有。)

标签: javascript jquery html iframe nw.js


【解决方案1】:

您可以尝试使用消息传递机制 这意味着在父框架上您可以使用

发送消息
    var win =$("#iframe").contentWindow;
    win.postMessage({ messageType: "predefinedMessage", features: data }, '*');

比在 iframe 中你可以得到消息

    function FrameCommunicator(attachManager) {
    var mfilesFrame;
    function _actOnMessage(data) {
        if (data.messageType === "predefinedMessage") {
        //perform here what you need
        }
    }

    window.addEventListener("message", function (e) {
        var data = e.data;
        mfilesFrame = e.source;
        _actOnMessage(data);
    }, false);

}

现在的问题是,如果 iframe 和父框架引用远程框架,它们可以具有相同的代码。

另一种方法是将消息的内容作为 JS 发送并使用 eval 运行它,但这是有风险的、不好的做法和很多其他事情:)

【讨论】:

  • 美丽的答案,但不幸的是不能做我想做的事。我无权访问 iFrame 的代码。
  • onmessage 不受 IE 支持。由于市场上的大多数浏览器都是 IE,不幸的是,这无论如何都不是一个好主意。
  • 我使用的是node-webkit,只要它在Chrome中工作,我就需要。
猜你喜欢
  • 2019-01-16
  • 2015-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-28
  • 2021-04-25
  • 2018-06-20
  • 2020-06-07
相关资源
最近更新 更多