在子窗口中从父窗口运行JS函数?

时间:2012-06-13 08:15:13

标签: javascript jquery

想在子窗口中从父窗口运行javascript函数

示例

我必须在不同的网站上说site1.comsite2.com

我希望site1.com打开网址site2.com

的新窗口
new_window = window.open("site2.com/index.php", "window2");

然后我想在这个new_window上运行一个js函数test()

// Where site2.com/index.php 
<html>
    ......
</html>
<script>
   function test(){
    // some code here
   }
</script>

摘要

想要打开新窗口(子窗口)并从父窗口运行一些JS函数。

2 个答案:

答案 0 :(得分:2)

您可以使用cross document messaging规避相同的原始政策,如下所示。

父窗口(site1.com):

var site2 = window.open("http://site2.com");
site2.postMessage("test", "http://site2.com");

子窗口(site2.com):

function test() {
    // some code here
}

window.addEventListener("message", function (event) {
    if (event.origin === "http://site1.com") {
        var funct = window[event.data];
        if (typeof funct === "function")
            funct();
    }
}, false);

这是一个简单的例子。您可以使其更复杂,允许回调,返回值等,但这需要完整解释博客文章。

您可以在Mozilla Developer Network上详细了解window.postMessage

但请注意,以下示例在Internet Explorer中无效(显然)。

答案 1 :(得分:0)

您不能,出于安全原因,如果它不在同一个域中,则必须从子窗口运行您的函数。