在iFrame上下文中运行Javascript

时间:2015-05-05 21:46:04

标签: javascript jquery html iframe nw.js

我正在尝试在网页中运行一个脚本,该脚本应该在<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()函数只是我在框架中调用函数的重新定位。

1 个答案:

答案 0 :(得分:0)

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

发送消息
    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和父fram如果引用远程可以拥有相同的代码。

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