沒有標準的函數來獲得,但我可以看到一個可能的方式:
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>
我猜修改代碼,使變量全球是不可能的? –
由於js在你的瀏覽器中運行,我認爲你應該能夠在'window.open'之後的斷點上執行,並在控制檯中執行類似'window.globalMyWindow = myWindow'的操作,以便它可以在其他地方訪問? –