2014-09-05 108 views
1

將父窗口的javascript函數傳遞給子窗口時出現問題。在Firefox和Chrome中運行良好,但在IE中無法運行(使用IE11測試)。具有諷刺意味的是,即使在IE中打開F12開發工具,它也能工作。這是在同一個域中,所以跨域塊應該不成問題。我曾嘗試:將javascript函數傳遞給用window.open()打開的子窗口

// on the parent 
var newWin = window.open('href', 'title', ''); 
newWin.myFunc = function() { alert('test'); }; 

// on the child (when calling this I get error: 'myFunc' is undefined) 
myFunc(); 

我知道我可以去周圍其他方式 - 呼籲從孩子父定義的函數:

// on the parent 
function myFunc() { 
    alert('test'); 
} 

// from child 
opener.myFunc(); 

但超出此問題的範圍原因我需要能夠將匿名函數傳遞給它必須能夠執行的子項。

+0

您正在測試的函數調用alert,還是執行其他操作並使用'console.log'? 'console'在IE中不存在,直到控制檯打開,所以'console.log'會拋出一個錯誤並停止其他事情的發生,這取決於你擁有它的位置。 – Ryan 2014-09-05 23:45:30

+0

實際功能不調用alert()和console.log。它做了一些與UI沒有任何關係的數據操作。 – Perry 2014-09-06 00:11:52

+0

在這裏黑暗中拍攝,你試試window.parent.myFunc();然而? – 2014-09-06 00:31:28

回答

0

幾個小時的嘗試各種事情之後,我結束了此解決方案:

// on parent 
var newWin = window.open('href', 'title', ''); 
$(newWin.document).ready(function() { 
    newWin.myFunc = function() { 
     alert('test'); 
    }; 
}); 

// on the child 
myFunc(); 

再次Chrome和Firefox似乎讓子窗口中的變量聲明文檔加載所以此解決辦法之前對他們來說不是必需的,但是這也會起作用。

+0

雖然這並不是一貫的工作。如果使用相同的窗口名稱快速連續打開窗口,則會出現「訪問被拒絕」錯誤。 Firefox和IE都出錯了。我想沒有辦法將匿名函數傳遞給子窗口。 – Perry 2014-09-07 10:13:50

相關問題