我一直在研究这个问题,虽然各种论坛上有很多关于类似问题的帖子,但没有一个问题或解决方案与我的问题完全匹配。
我有一个应用程序已成功使用下面的功能,一旦完成弹出窗口,就会重定向回父窗口。最近我一直在研究与其他浏览器的兼容性(允许系统通过iPad使用),并且发现使用Safari或Chrome时此功能存在问题。
父页面是一些数据库信息的摘要,用户单击链接打开一个窗口(通过window.open)以查看更详细的数据。完成后,子窗口上会有一个链接刷新父级数据(部分是为了确保在返回父级时显示正确的数据)并关闭子级。
Safari中的控制台报告“'window.opener.location.href'的结果不是函数”。我试图使用上面的'window.opener.document.location.href'和'window.opener.window.location.href'(取自网上提供的其他解决方案),但没有成功。
我知道有些人的功能很好,而其他人则有这种问题。我想知道这个具体情况是否有任何答案。
这是我的功能:
function quicklink(url) {
window.opener.document.location.href(url);
self.close();
}
这在IE7,8和9的第一天起作用,但在Safari(适用于Windows或iPad)或Chrome中无效。
有什么想法吗?
答案 0 :(得分:18)
href
是属性,而不是方法。只需为其分配URL:
window.opener.document.location.href = url;
这也适用于IE。它也是一个属性,即使它允许你将它用作方法。
答案 1 :(得分:0)
使用以下代码获得所需的结果。
父母:
<script language="javascript">
function open_a_window()
{
var w = 200;
var h = 200;
var left = Number((screen.width/2)-(w/2));
var tops = Number((screen.height/2)-(h/2));
window.open("window_to_close.html", '', 'toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, resizable=no, copyhistory=no, width='+w+', height='+h+', top='+tops+', left='+left);
return false;
}
// opener:
window.onmessage = function (e) {
if (e.data === 'location') {
window.location.replace('https://www.google.com');
}
};
</script>
<input type="button" onclick="return open_a_window();" value="Open New Window/Tab" />
弹出窗口:
<!DOCTYPE html>
<html>
<body onload="quitBox('quit');">
<h1>The window closer:</h1>
<input type="button" onclick="return quitBox('quit');" value="Close This Window/Tab" />
<script language="javascript">
function quitBox(cmd)
{
if (cmd=='quit')
{
window.opener.postMessage('location', '*');
window.open(location, '_self').close();
}
return false;
}
</script>
</body>
</html>