我知道我可以访问用window.open打开的窗口,如下所示:
var myWindow = window.open('url','uniqueWindowId','argument=value,argument=value')
myWindow.document.getElementById('someId').display = "none";
myWindow.document.getElementsByClassName('someClass')[17].firstChild.style.backgroundColor = "red";
...
但是我在调试第三方代码时遇到了无法从控制台访问myWindow变量的问题(myWindow仅限于该函数)。有没有什么方法可以从父窗口的javascript控制台使用其uniqueWindowId获取窗口?
答案 0 :(得分:1)
没有标准功能可以实现,但我可以看到一种可能的方式:
function retrievePopupWindowHandle(windowName, callback){
window.open('javascript:window.opener.handleRetrieved = window;', windowName);
setTimeout(function(){
var popupHandle = window.handleRetrieved;
delete window.handleRetrieved;
callback(popupHandle);
}, 1);
}
但请记住,您仍然处于所有安全措施之下,例如相同的协议和原始政策。
不建议使用它,但它会起作用。
快速测试以显示它有效(由于安全策略,在本地创建文件并在浏览器中打开它,它将无法在jsfiddle上运行):
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<button id="b">Create Window</button>
<button id="b2">Retrieve Handle & Test</button>
<script>
var popupWindow;
function retrievePopupWindowHandle(windowName, callback){
window.open('javascript:window.opener.handleRetrieved = window;', windowName);
setTimeout(function(){
var popupHandle = window.handleRetrieved;
delete window.handleRetrieved;
callback(popupHandle);
}, 1);
}
document.getElementById('b').addEventListener('click', function(){
popupWindow = window.open('about:blank', 'popupWindow');
});
document.getElementById('b2').addEventListener('click', function(){
retrievePopupWindowHandle('popupWindow', function(popup){
if(popupWindow == popup)
alert('Handles Match!');
});
});
</script>
</body>
</html>