Javascript 无法将函数注入本机窗口
我正试图在Javascript 无法将函数注入本机窗口,javascript,visual-studio,visual-studio-2015,Javascript,Visual Studio,Visual Studio 2015,我正试图在窗口中插入一个getStatus函数。具体来说,我想将其粘贴到窗口返回的窗口上。打开: window.open = function (open) { return function (url, name, opts) { var windowObj = open.call(window, url, name, opts); windowObj.getStatus = function () { return 1;
窗口中插入一个getStatus函数。具体来说,我想将其粘贴到窗口返回的窗口上。打开:
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”
有没有人经历过这样的问题?感觉像是时间问题。调试器可能有问题
有没有人经历过这样的问题
没有。我在Visual Studio 2013 Express edition中调试了多次,但没有崩溃。我能够调试它,没有任何问题
注意:对于问题的简化版本,以下回答可能听起来不符合上下文
坦率地说,我从来没有尝试过重写window的默认行为。但从你的尝试来看,尝试一下是很有诱惑力的
所以我在这里试过:
而且至少警报(1)
的执行是一致的。我还将其修改为调用nativeaddEventListener
,并且它似乎也适用于以下条件:
我使用了单击
事件,而不是关闭
<代码>卸载前
也有效
我使用了“about:blank”作为URL
另外,如果您在子窗口中打开另一个页面,则无法在父窗口中处理它的JS事件。您需要在子窗口中打开的页面中处理适当的JS事件,并且需要从这些处理程序将信息传递到window.opener
关于close
事件,我从未使用过它(甚至没有听说过它:|)。相反,unload
/beforeunload
是通常使用的两个事件。我简化了我的问题。我认为这与重写addEventListener无关,而是与向window对象注入任何函数有关。这是否意味着,如果不进行调试,getStatus()
执行时不会出现任何问题。只有在调试的时候你才会遇到问题?我还没有在没有调试器的情况下尝试过。这只是我的怀疑。