我有一個頁面上的腳本www.example.com/index.html打開home.example.com/foo .html在一個彈出窗口中。當用戶關閉彈出窗口時,我想通過調用一個Javascript函數來通知開啓者頁面(它對DOM做了一些事情)。我用unbeforeunload
這樣的:在IE中設置document.domain後讀取window.location(6)
// In index.html on www.example.com:
window.fn = function() { /* Perform stuff after foo.html has closed */ }
// In foo.html on home.example.com:
window.onbeforeunload = function() {
if (window.opener && window.opener.fn)
window.opener.fn();
};
這不起作用,因爲網頁都在不同的領域。我可以設置document.domain
屬性來解決這個問題:
document.domain = "example.com";
不幸的是,這不符合Web應用程序框架,我就foo.html側(阿帕奇檢票)使用打得很好,因爲它包含一個腳本,做是這樣的:
var src = (window.location.protocol == 'https:') ? something : other;
顯然,在IE6 *,當您設置文檔領域,location
對象變成只寫,所以試圖讀取window.location.protocol
拋出「拒絕訪問」。
所以,我的問題是:如何允許跨域Javascript函數調用,同時仍允許我的腳本讀取location
對象的內容?
- 我不能通過服務器去。 (我想要調用的函數所做的工作並不是真的那麼起作用。)
- 我在設置
document.domain
之前無法讀取window.location.protocol
屬性,然後在條件賦值中使用該值;這樣做會要求我重新構建Web框架庫 - 這不是我想要做的事情。
*可能在IE中,也與其他版本;沒有檢查過。
這可能是我最棒的一拍。謝謝。 – gustafc 2009-10-07 06:50:36