在iFrame上下文中运行Javascript

在iFrame上下文中运行Javascript,javascript,jquery,html,iframe,nw.js,Javascript,Jquery,Html,Iframe,Nw.js,我正在尝试在网页中运行脚本,该脚本应在中执行。现在我可以调用中设置的函数。。我只是在运行脚本到的上下文时遇到问题 下面是我如何运行 现在,我希望运行一个脚本,而不是调用preforgsearch函数-对于本例,这是脚本 console.log('worked!'); 我的实际脚本很大,所以我不会把它放在这里——因为这个问题 那么,有没有办法通过的上下文运行该脚本?例如,我的第一个猜测是 $('#iframe').get(0).contentWindow.function(){ console

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

下面是我如何运行

现在,我希望运行一个脚本,而不是调用
preforgsearch
函数-对于本例,这是脚本

console.log('worked!');
我的实际脚本很大,所以我不会把它放在这里——因为这个问题

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

$('#iframe').get(0).contentWindow.function(){
 console.log('worked!');
}
不过,我以前从未在通过
之类的程序运行函数时遇到过麻烦,所以我被难倒了

提前谢谢你的帮助

注意我正在使用NW.js(Node Webkit)删除所有
限制


注意v2
preforgsearch()
函数只是我在框架中调用函数的一个例子。

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

    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运行它,但这是有风险的、不好的做法,还有很多其他事情:)

函数使用jQuery吗?如果是这样,则无法将函数直接绑定到新窗口,或者
iframeWindow.jQuery
将未定义。但是可以很容易地将
窗口
作为函数的参数传递…显示函数本身的示例您必须在iframe来源的页面上将
performSearch
作为函数来运行。您必须在iframe来源的页面上将
performSearch
作为函数来运行。该函数可以运行,但这只是一个如何调用
函数的示例。我现在尝试插入一个脚本,而不是一个函数。(在
正在查看的页面上已经设置了搜索,我的新代码不是。)回答很好,但很遗憾,我不能做我想做的事情。我没有访问iFrame的代码。
onmessage
不受IE支持。由于市场上的大多数浏览器都是IE,不幸的是这不是一个好主意。我使用的是node webkit,只要它在Chrome中工作,这就是我所需要的。
    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);

}