0

我使用此代码来演示相同域上的概念:

家长:

<html>
    <body>
<form>
    <input id="details" name="details">
    <input type="button" name="choice" onClick="window.open('http://domainB.com/popuppage.html','popuppage','width=850,toolbar=1,resizable=1,scrollbars=yes,height=700,top=100,left=100');" value="Open popup">
</form>
</body>
</html>

和弹出文件:

<html>
<head>
</head>
<body>
<SCRIPT LANGUAGE="JavaScript">
<!-- Begin
function sendValue (s){
var selvalue = s.value;
window.opener.document.getElementById('details').value = selvalue;
window.close();
}
//  End -->
</script>
<form name="selectform">
<input name="details" value="">
<input type=button value="Copy input to parent opener" onClick="sendValue(this.form.details);">
</form>
</body>
</html>

这很好用,但是由于弹出窗口对父页面的内容进行了修改,window.opener.document.getElementById('details').value = selvalue;出于安全原因,这在跨域示例中不起作用。我不想修改父级上的内容,我只想向父级脚本传达一个值,所以我需要父级上的一个侦听器脚本来参加关闭时从弹出窗口发送的信息。这可能吗?备择方案?

4

1 回答 1

1

正如 Passerby 所建议的,postMessage ( https://developer.mozilla.org/en-US/docs/DOM/window.postMessage ) 是您想要做的事情的理想解决方案。因为它不适用于旧浏览器,你要么必须将你的东西限制在较新的浏览器上,要么使用 iframe 等黑客技术来实现跨域通信。

您可以在弹出窗口中运行 easyXDM 并将 domainA.com 加载到 iframe 中,然后从该 iframe 中您应该能够访问和操作 domainA.com 上启动弹出窗口的其他页面。

于 2013-04-17T20:01:53.123 回答