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

时间:2011-04-13 15:18:58

标签: javascript internet-explorer-8

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

if (window.opener && (typeof window.opener.callbackFunction == 'function')) {
  window.opener.callbackFunction()
}

这在Firefox中运行良好 - 定义函数时,typeof是“function”。但是,在IE8中,typeof是“对象”。该函数通常在开启器中定义,如下所示:

function callbackFunction() {
  ...
}

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

2 个答案:

答案 0 :(得分:6)

你可以尝试

if ( window.opener && (typeof window.opener.callbackFunction != 'undefined') {
  window.opener.callbackFunction();
}

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

答案 1 :(得分:0)

这是一个黑客,但这将有效:

if (typeof window.opener.callbackFunction == 'object') {
   // this first 'if' is required because window.opener returns an object even
   // if window.opener has been closed
   if(window.opener.callbackFunction.toString().substr(0,8) == 'function') {
      window.opener.callbackFunction();
   }
}

注意:对于某些本机浏览器功能,例如alert(),它将失败。