检查是否在IE8的opener窗口中定义了一个函数

And*_*w K 5 javascript internet-explorer-8

我有一个弹出窗口,允许开启窗口可选地定义一个回调函数,如果定义将在用户完成弹出窗口时调用.根据我读过的建议,我这样做:

if (window.opener && (typeof window.opener.callbackFunction == 'function')) {
  window.opener.callbackFunction()
}
Run Code Online (Sandbox Code Playgroud)

这在Firefox中工作正常 - 当定义函数时,typeof是预期的"函数".但是,在IE8中,typeof是"对象".该函数通常在开启器中定义,如下所示:

function callbackFunction() {
  ...
}
Run Code Online (Sandbox Code Playgroud)

有谁知道为什么IE8中的typeof会有所不同?我也对如何实现这一点的其他建议持开放态度.我也试过,if (window.opener && window.opener.callbackFunction)但是当没有定义函数时,导致IE8爆炸.

Dav*_*ers 7

你可以试试

if ( window.opener && (typeof window.opener.callbackFunction != 'undefined') {
  window.opener.callbackFunction();
}
Run Code Online (Sandbox Code Playgroud)

我目前没有IE,所以我无法测试,但相信它会起作用.