我有一个弹出窗口,允许开启窗口可选地定义一个回调函数,如果定义将在用户完成弹出窗口时调用。根据我读过的建议,我正在这样做:
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会爆炸。
答案 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(),它将失败。