检查是否在IE8的打开器窗口中定义了功能

问题描述

|| 我有一个弹出窗口,允许打开器窗口可选地定义一个回调函数,如果定义了该回调函数,则当用户完成弹出窗口时将调用该回调函数。根据我已阅读的建议,我正在这样做:
if (window.opener && (typeof window.opener.callbackFunction == \'function\')) {
  window.opener.callbackFunction()
}
这在Firefox中可以正常工作-定义函数后,typeof就是预期的\“ function \”。但是,在IE8中,typeof改为\“ object \”。该函数通常在打开器中定义,如下所示:
function callbackFunction() {
  ...
}
有人知道为什么IE8中的typeof会有所不同吗?对于如何完成此操作,我也欢迎其他建议。我也尝试了
if (window.opener && window.opener.callbackFunction)
,但是导致在未定义函数时IE8崩溃。     

解决方法

你可以试试
if ( window.opener && (typeof window.opener.callbackFunction != \'undefined\') {
  window.opener.callbackFunction();
}
我目前没有IE,因此无法测试,但相信它会工作。     ,这是一个hack,但这可以工作:
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(),它将失败。