我对使用 window.open() 显示付款对话框的网站有疑问。
弹出窗口中的页面重定向到重定向回结果页面的不同域。在结果页面上,我尝试设置一个属性window.opener
来表示付款正常。
这适用于某些用户。但是,其他用户会收到一条错误消息,指出window.opener
未定义。
可以使用这些简单的页面重新创建问题:
index.html (打开弹出窗口)
<!DOCTYPE html>
<html lang="en">
<body>
<input type="button" value="Popup" onclick="openPaymentWindow();" />
<div id="result" style="background-color: silver;"/>
<script type="text/javascript">
function openPaymentWindow() {
win = window.open('popup.html', 'popup');
}
</script>
</body>
</html>
popup.html (重定向到不同的域)
<!DOCTYPE html>
<html>
<body onload="document.forms[0].submit();">
<form action="http://[other_domain]/payment.html">
</form>
</body>
</html>
payment.html (重定向回原始域)
<!DOCTYPE html>
<html>
<body onload="document.forms[0].submit();">
<form action="http://[original_domain]/result.html">
</form>
</body>
</html>
result.html (在索引页面上设置一个属性)
<!DOCTYPE html>
<html>
<body>
<input type="button" value="Call top" onclick="callTop();" />
<script type="text/javascript">
function callTop() {
// Here, window.opener (and top.opener) is undefined for some users
window.opener.document.getElementById('result').style.background = 'green';
}
</script>
</body>
</html>
由于并非所有用户都受到影响,我的猜测是它与一些安全设置有关。但我根本不知道在哪里可以找到它们 - 或者如何在我自己的电脑上复制错误。