2012-07-13 48 views
0

我有兩個窗口:父窗口和子窗口(html頁面和iframe)。如何使用子窗口上下文執行在父窗口中定義的函數

我有一個腳本庫加載到父窗口。

我想從子窗口中重新使用此庫,而無需將相同的腳本加載到子窗口中。

這是很容易調用父窗口的功能是這樣的:

top.LibraryMethod(); 

但這裏有一個問題:LibraryMethod將與父窗口的執行上下文中執行。 這意味着腳本中使用的全局變量將從父窗口而不是子窗口收集。 例如,如果LibraryMethod聲明如下:

function LibraryMethod(){ alert(document.location.href); } 

它會顯示從父或子窗口被稱爲相同的值,但我需要在這裏訪問的子窗口的文檔。

有一個明顯的解決方案 - 將子窗口作爲函數參數傳遞,但是這需要更改庫代碼,這是不可接受的。

因此,問題是如何從父窗口中聲明的函數訪問子窗口對象,如果從子窗口調用此函數,而不引入其他函數參數。

回答

1

所以,問題是如何從父窗口中聲明的函數訪問子窗口對象,如果從子窗口調用此函數,而不引入其他函數參數。

你不行。您必須傳遞函數參數,或者您必須能夠控制在父窗口中加載庫函數的上下文(即使您這樣做,第二個選項也是不禮貌的)。如果你沒有這些東西,你將無法改變全局變量在父窗口函數中的解析方式。這兩件事都需要更改庫的腳本文件(我假設它是在一個單獨的腳本文件中,而不僅僅是script標籤中的內聯內容)。

相關問題