2013-02-17 38 views
1

訪問全局變量當一個窗口將打開使用Javascript - 從一個子窗口

var someVar = "someValue"; 
    newWin = window.open("somepage.html","",""); 

子窗口子窗口可以訪問父的全局變量

var x = window.opener.someVar; 
    alert(x); 

這工作得很好(孩子警報「 someValue「)在Firefox 18,IE6,IE7,Opera 11.52,Safari 5.1.1但是它在Chrome 24.0(也許更新的Safaris呢?)中失敗了,當它警告」未定義「時。

哎呀!任何人都會遇到這種情況任何解決方法?


在過去,我已經能夠訪問全局變量或者在其他窗口中執行函數。我討厭看到這個功能消失。 戴夫

+0

您是在服務器上還是在'file:// URL中測試這個? – loganfsmyth 2013-02-17 04:11:47

回答

1

它仍然似乎爲我工作。在這個網站上,在Chrome試試這個自己這個頁面上的控制檯:

this.test = "hello" 
window.open(window.location.href) //opens the same page 

(你必須確保彈出窗口被允許,所以你可能需要做兩次)。然後,在彈出式控制檯中:

console.log(window.opener.test) 

您會看到「hello」。

這就是說,我已經注意到,Chrome是最嚴格的,當涉及到跨域訪問特別本地開發站點時(如果你只是直接通過與文件的文件系統訪問HTML文件://,例如)。我喜歡在Chrome中開發,如果我在本地開發,則需要運行某種Web服務器來爲頁面提供服務,而Firefox則樂於讓我直接通過文件系統訪問它們,而不會抱怨XSS問題。

+0

loganfsmyth和lmortenson – 2013-02-17 04:35:21

+0

loganfsmyth和@lmortenson, 謝謝!是的,我正在做的文件:/ /我只是上傳到我的服務器,它在那裏工作正常。另外,在父窗口中,我仍然可以在子項上執行一個函數。看起來像雙向一切都會在那裏很好地工作。 但是,這是一個本地應用程序 - 不涉及服務器。 S.O.會在上午提供更長的答案。允許我回答我自己的問題。 – 2013-02-17 05:26:25

0

謝謝你們,

是的,我做的file://我只是把它上傳到我的服務器,它工作正常那裏。另外,在父窗口中,我仍然可以在子項上執行一個函數。看起來雙向一切都可以在服務器上正常工作。

這是我的場景。我正在爲Windows程序BeerSmith2(Beer Homebrewing program)開發附加組件。這個Windows應用程序使用小型「專屬」瀏覽器(您的計算機上的IE)來顯示來自Windows應用程序的「報告」。我的附加組件需要將應用程序的小型捕獲瀏覽器分解爲全屏瀏覽器(與IE相同),並將大量變量從俘虜傳遞到全屏。

所以沒有涉及服務器,我真的只需要支持IE瀏覽器,但我試圖保持它跨瀏覽器,以便我的插件將在未來的Mac版本的BeerSmith2中使用。我在Firefox中開發,然後在IE6中工作(如果它在IE6上工作,它可以在任何情況下工作),然後在IE-later/Opera/Safari/Chrome中進行最後的調整,這通常只會有小的困難。

想象一下,當整個程序(幾千行JS代碼)在最新的Chrome上完全失敗時,我的恐懼。由於沒有服務器,我不能做Ajax,我想不出有任何其他方式來做到這一點。所以我認爲我卡住了。我希望薩法菲不會效仿。

IE瀏覽器有一個關於在file://中運行JS的令人討厭的彈出警告,但是你可以關閉它。 Chrome在這個窗口之間傳遞的變量只是默默地失敗,我不認爲它給你任何選擇。哇,微軟實際上做了正確的事情!

感謝您的幫助。 Dave