javascript 当url哈希更改时,刷新通过www.example.com打开的打开窗口window.open

bzzcjhmw  于 2023-03-11  发布在  Java
关注(0)|答案(3)|浏览(304)

我用window.open(...)打开了一个小的弹出引用窗口,并给它起了一个名字。当后续的window.open被调用时,它可以被正确地重用。

function openHelp(hash) {
    var helpWindow = window.open(location.protocol + "/help.aspx" + (hash ? "#" + hash : ""), "helpWindow", "width=750, height=600, resizable=1, scrollbars=1, location=0, directories=0, status=no, menubar=no, toolbar=no");
}

它不能正常工作的一种情况是当有人在帮助页面url打开窗口时,只有哈希值改变(即#jump-to-me).只有在页面重新加载时,页面才能正确地转到哈希值.
有没有办法找到打开的窗口,检查URL是否匹配我们试图打开的内容,并在哈希值改变时有条件地执行window.location.refresh()

mzillmmw

mzillmmw1#

如果我猜对了,你就可以开始了。

var extraWindow;

function makeWindow(){
   extraWindow= window.open(/* .. */);
}

// this will reload the extra window that you just opened.
function reloadWindow(){
  if(extraWindow){
     extraWindow.location.reload();
  }
}

makeWindow();

// reload the window when the hash changes or possibly change the page url based on this.
window.addEventListener("hashchange", reloadWindow, false);

我希望这是一个很好的答案。

bsxbgnwa

bsxbgnwa2#

浏览器不会重新加载窗口,如果只有材料后的哈希变化.
我发现在哈希之前添加一个随机查询参数会强制它重新加载底层页面:

function openHelp(hash) {
    const unique = /* generate a unique value or nonce somehow */;
    const helpWindow = window.open(location.protocol + "/help.aspx" + "?__uniq=" + unique + (hash ? "#" + hash : ""), "helpWindow", "width=750, height=600, resizable=1, scrollbars=1, location=0, directories=0, status=no, menubar=no, toolbar=no");
}

在我的例子中,hash作为唯一值工作得很好(在任何意义上,它都不必是“唯一的”,只要它在hash发生变化时发生变化即可)。

new9mtju

new9mtju3#

差不多了,只需要在hashchange事件的特定窗口上添加一个事件侦听器。

function openHelp(hash) {
    var helpWindow = window.open(location.protocol + "/help.aspx" + (hash ? "#" + hash : ""), "helpWindow", "width=750, height=600, resizable=1, scrollbars=1, location=0, directories=0, status=no, menubar=no, toolbar=no");
    helpWindow.addEventListener("hashchange", function () { this.location.reload() }, false);
}

相关问题