我使用此代码演示相同域上的概念:
父:
<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;
的内容,出于安全原因,这不适用于跨域示例。我不想修改父级的内容,我只想将一个值传递给父脚本,所以我需要一个父级的监听器脚本来参加关闭时从弹出窗口发送的信息。这可能吗?替代?
答案 0 :(得分:1)
正如Passerby所说,postMessage(https://developer.mozilla.org/en-US/docs/DOM/window.postMessage)是您想要做的事情的理想解决方案。因为它不适用于旧浏览器,所以您必须将您的内容限制在较新的浏览器中,或者使用iframe等来实现跨域通信。
您可以在弹出窗口中运行easyXDM并让它在iframe中加载domainA.com,然后从该iframe中您应该能够访问和操作启动弹出窗口的domainA.com上的其他页面。