我有这个小功能来打开/关闭弹出播放器:
function popuponclick(popup)
{
my_window = window.open("folder/player-itself.htm", popup, "width=350,height=150");
}
function closepopup()
{
my_window.close();
}
我从网站每个页面上的HTML锚点调用函数(想法是让玩家随时停止/启动)......现在......
它可以正常工作,直到我更改页面或刷新现有页面 - 然后窗口再也无法关闭。知道我错了吗?在FF和IE8中测试过,行为相同。
感谢您的帮助。
答案 0 :(得分:1)
当你重新加载原始窗口(或标签)时,关于旧窗口的一切都消失了,被炸成了数字空洞,永远不会被再次看到或听到。位字面上分解为虚无。
因此,当你打开第二个窗口时你非常喜爱的“my_window”引用已经消失了,新加载的窗口中的“my_window”变量什么都没有。它的名字只是对现在死页中变量的嘲弄。
处理这种情况的唯一方法是弹出窗口定期通过“window.opener”进行检查,以查看其父页面是否被某些interloper粗略地替换。如果发生这种情况(并且新页面来自同一个域),则弹出页面可以在新页面的“my_window”变量中恢复对自身的引用。
编辑 - 好的,这是一个样本。你可以在弹出页面中输入这样的内容,而不是启动页面:
<script>
var checkParent = setInterval(function() {
try {
if (window.opener && ('my_window' in window.opener))
window.opener.my_window = window;
}
catch (_) {
// clear the timer, since we probably won't be able to fix it now
clearInterval(checkParent);
}
}, 100);
</script>
这可能非常接近。