gpt4 book ai didi

javascript - 访问使用 window.open 打开的窗口的内容

转载 作者:行者123 更新时间:2023-12-03 08:43:13 24 4
gpt4 key购买 nike

我知道我可以访问用 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";
...

但是在调试第 3 方代码期间,我遇到了无法从控制台访问 myWindow 变量的问题(myWindow 的作用域仅限于该函数)。有什么方法可以从父窗口的 javascript 控制台使用其 uniqueWindowId 获取窗口吗?

最佳答案

没有标准函数可以实现这一点,但我可以看到一种可能的方法:

function retrievePopupWindowHandle(windowName, callback){
window.open('javascript:window.opener.handleRetrieved = window;', windowName);

setTimeout(function(){
var popupHandle = window.handleRetrieved;
delete window.handleRetrieved;

callback(popupHandle);
}, 1);
}

但请记住,您仍然受到所有安全措施的保护,例如相同的协议(protocol)和来源策略。

不建议这样做,但它会起作用。

快速测试以证明其有效(由于安全策略,它无法在 jsfiddle 上工作,请在本地创建文件并在浏览器中打开它):

<!DOCTYPE html>
<html>
<head>
</head>
<body>
<button id="b">Create Window</button>
<button id="b2">Retrieve Handle &amp; 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>

关于javascript - 访问使用 window.open 打开的窗口的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32996710/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com