Javascript 查找以前由window打开的窗口。打开
我们从单个域运行时遇到以下情况: 页面A使用Javascript 查找以前由window打开的窗口。打开,javascript,window.open,Javascript,Window.open,我们从单个域运行时遇到以下情况: 页面A使用window.open()打开命名窗口(弹出式播放器)window.open()为页面提供对该窗口的引用 用户现在重新加载页面A。对命名窗口的引用丢失。使用window.open()来“查找”窗口有一个不幸的副作用,那就是重新加载它(不可取)。是否有其他方法获取此窗口的引用?实际上,您所做的是销毁所创建窗口(弹出窗口)的父级(a页),因此它不再引用原始父级,因此无法获取直接引用 我能想到的唯一解决方案是使用一个浏览器,该浏览器为您提供了额外的javas
window.open()
打开命名窗口(弹出式播放器)window.open()
为页面提供对该窗口的引用
用户现在重新加载页面A。对命名窗口的引用丢失。使用
window.open()
来“查找”窗口有一个不幸的副作用,那就是重新加载它(不可取)。是否有其他方法获取此窗口的引用?实际上,您所做的是销毁所创建窗口(弹出窗口)的父级(a页),因此它不再引用原始父级,因此无法获取直接引用
我能想到的唯一解决方案是使用一个浏览器,该浏览器为您提供了额外的javascript功能,可以在活动窗口(选项卡)中循环,并找到一个具有特殊属性的窗口(即:您重新加载的页面a),该属性可被弹出窗口识别
不幸的是,我想只有firefox有一些额外的功能或扩展,给了你这种灵活性。(这也是一种安全风险)好吧,不,没有 一种肮脏但我猜它会工作的黑客行为是使用window.opener从弹出窗口中定期重置父窗口上的引用,代码如下: setInterval(function() { if(window.opener) { window.opener.document.myPopupWindow = window } }, 100) setInterval(函数(){ if(窗口开启器){ window.opener.document.myPopupWindow=窗口 } }, 100) 在父窗口中,您将能够访问document.myPopupWindow,即使在重新加载之后(嗯,重新加载100毫秒之后)。这应该可以跨浏览器使用。尝试以下操作:
var playerUrl = 'http://my.player...';
var popupPlayer= window.open('', 'popupPlayer', 'width=150,height=100') ;
if(popupPlayer.location.href == 'about:blank' ){
popupPlayer.location = playerUrl ;
}
popupPlayer.focus();
它将打开一个具有唯一名称的空白窗口。由于url为空,因此不会重新加载窗口的内容 这应该行得通。在弹出窗口中添加此代码:
function updateOpener() {
if (window.opener)
window.opener.document.myPopupWindow = window;
else
setTimeout(updateOpener, 100);
}
updateOpener();
这在父窗口的onload中。要确保myPopupWindow已设置,请在访问它之前等待100毫秒
setTimeout(function() {
if (document.myPopupWindow)
document.myPopupWindow.focus();
}, 100);
如果所有窗口共享一个公共Url源,则可以注册ServiceWorker,然后从ServiceWorker访问所有窗口: 抱歉,您将无法将对其他窗口的引用从WorkerService传递到您的窗口,但您可以通过与ServiceWorker建立通信