我正在尝试将getStatus函数注入window
。具体来说,我想将它贴在window.open
返回的窗口上:
window.open = function (open) {
return function (url, name, opts) {
var windowObj = open.call(window, url, name, opts);
windowObj.getStatus = function () {
return 1;
};
return windowObj;
};
}(window.open)
我的代码中的其他地方,我这样做:
var myWindow = window.open("...", "...", "...");
var a = myWindow.getStatus();
有时当我从Visual Studio 2015调试时,我可以成功调用该函数,有时我不能并且崩溃:
0x800a01b6 - JavaScript运行时错误:对象不支持属性或方法'getStatus'
有没有人遇到过这样的问题?感觉像是时间问题。可能是调试器的一个问题。
答案 0 :(得分:0)
有没有人遇到过这样的问题?
没有。我在Visual Studio 2013 Express版中进行了多次调试并且没有崩溃。我能够毫无问题地进行调试。
注意:对于问题的简化版本,以下响应可能听起来不合时宜。
坦率地说,我从未尝试覆盖窗口的默认行为。但是看看你的尝试,尝试它是非常诱人的。 :)
所以我在这里试了一下:https://jsfiddle.net/vnathalye/4hhrb255/
至少alert(1)
一直在执行。我还修改了它以调用本机addEventListener
,它似乎也适用于以下条件:
click
事件代替close
。 beforeunload
也有效。 AFAIK,如果您在子窗口中打开另一个页面,则无法在父窗口中处理它的JS事件。您需要在子窗口中打开的页面中处理适当的JS事件,并且需要将这些信息传递给window.opener
。
关于close
事件,我从未使用它(或者甚至没有使用过它:|)。相反,unload
/ beforeunload
是通常使用的两个事件。