2014-09-05 104 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

相关问题