从iframe中的父窗口调用javascript函数,但是iframe src来自远程机器

时间:2013-03-15 03:41:02

标签: javascript html iframe

首先,我的页面中有这个iframe。

<iframe src="https://192.168.100.87/index.html">
   <p>Browser does not support iframe</p>
</iframe>

我的页面标题中有以下脚本。

<head>
   <script type="text/javascript">
       function callMe(){
        alert('called');
       }
   </script>
</head>

我从远程机器的index.html获得以下代码。

<body>
   <input type="button" value="Click" onClick="window.parent.callMe()" />
</body>

正如您所看到的,我正在调用包含iframe的主页面功能。 但不幸的是我无法调用该函数。

这可能吗,我在这里缺少什么? 感谢

2 个答案:

答案 0 :(得分:2)

您无法在其他域访问属性或调用Windows方法。但是,您可以使用postMessage向其他域的框架发送邮件(请参阅https://developer.mozilla.org/en-US/docs/DOM/window.postMessage)。

试试parent.postMessage('testing', '*');。第一个参数是要发送的数据;第二个是你要发送给它的窗口的域。使用'*',您可以将其发送给任何主机,但为了更好的安全性,您应该使用父级的实际域。

然后在您的父页面中:

window.addEventListener('message', function(event) {
    if (event.data == 'testing') {
        callMe();
    }
});

这仅适用于现代浏览器。如果您需要支持旧浏览器(如IE 7或更早版本),请查找postMessage polyfill。

答案 1 :(得分:1)

除非代码运行的机器也在192.168.100.87,否则这是不可能的。您无法从不同来源的页面访问任何内容。见https://developer.mozilla.org/en-US/docs/JavaScript/Same_origin_policy_for_JavaScript