[英]How access parent's controls from child of child using javascript?
我想從彈出窗口的子級訪問父窗口的控件,例如:
Window1
打開Window2
Window2
打開Window3
Window3
打開Window2
現在,當從Window3打開Window2時,我需要從Window2訪問Window1的控件,我該怎么辦?
我試圖使用window.opener.getElementById()
和window.opener.opener.getElementById()
感到困惑!
編輯:
在Window1中打開Window2的代碼 :
window.open('window2');
在Window2中打開Window3的代碼 :
window.location.href = 'Window3';
在Window3中打開Windows2的代碼:
window.open('window2');
由於您再次使用窗口, 因此原始的開啟器值將丟失
您必須使用window.name來識別窗口
window3 > window.open(url, "window2",.....);
window1 > window.open(url, "window2",.....);
您可以使用以下方式命名/重命名窗口
window.name = "window3";
你也可以用這個
function getOpenerWindowByName(name)
{
var w = window;
while(w = w.opener) if(w.name === name) return w;
return null;
}
您可以通過window.opener
鏈向后掃描:
function getBaseOpener(win){
var opener;
do {
/// check to see if our storage property has been set, if so use it
/// this gets around the problem that the window.opener chain may have
/// been broken.
if ( win.baseOpener ) {
opener = win.baseOpener;
break;
}
/// for each window.opener we find scan backwards until we find a
/// window that has no window.opener. This should be our main window.
} while( (opener = win.opener) && (win = opener) );
/// return the result and store it for next time, this will prevent
/// problems if any of our openers are ever closed.
return (win.baseOpener = opener);
}
上面的代碼應該始終返回基本打開器,只要在創建該窗口后在每個新打開的窗口上執行一次即可(此時整個窗口鏈仍處於活動狀態)。
顯然,如果基礎窗口曾經關閉,那么您就有問題了;)
抱歉,我認為上面的內容很清楚,我想這是您是否處理了Windows之間的大量相互通信-但如果不是,則不行:)無論如何,我已經添加了注釋以解釋代碼並添加了用法信息以使事情更清晰。
放置以下內容,以便將其加載到將打開的每個窗口中。
<script>
function getBaseOpener(win){
var opener;
do {
if ( win.baseOpener ) {
opener = win.baseOpener;
break;
}
} while( (opener = win.opener) && (win = opener) );
return (win.baseOpener = opener);
}
/// this first execution is important, it creates the baseOpener
/// property that will keep our link to the main window even
/// if our parents have been closed and reopened later on.
var mainWindow = getBaseOpener(window);
</script>
然后,如果需要獲取基本窗口,請在代碼中的任何位置使用以下命令:
mainWindow
或再次運行getBaseOpener:
getBaseOpener(window)
這應該始終返回基本/主窗口(窗口1)-除非從基本窗口本身內執行...否則它將返回undefined
。
如果您隨后希望使用getElementById
,則需要像這樣訪問文檔:
mainWindow.document.getElementById('element_id');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.