如何停止另一个函数调用window.open覆盖的函数

时间:2019-01-09 06:33:46

标签: javascript html

我有一个函数,只要我从覆盖该函数开始,就从window.open打开新选项卡时都会调用该函数。另外,

  

我在document.onclick事件上附加了一个功能,我需要   每当window.open函数运行时,函数将暂停或停止。

我知道 event.stopPropagation(); 用于实现此目的,但是在函数中,由于事件参数无法传递,因此无法正常工作。

window.open = function(open) {
    return function(url) {
        console.log("url", url);
        
        // need to works here event.stopPropagation();
        return open.call(window, url);
    };
}(window.open);

document.onclick = clickListener;
function clickListener() {
  console.log("click");
};
function openLink(){
window.open('https://www.google.com')
}
<button onclick="openLink()">open link</button>

2 个答案:

答案 0 :(得分:3)

事件对象将在窗口上可用。您可以尝试以下操作:

    window.open = (function(open) {
    return function(url) {
        window.event.stopPropagation();
        console.log("url", url);

        // need to works here event.stopPropagation();
        return open.call(window, url);
    };
   })(window.open);

答案 1 :(得分:0)

var staticVar = false;
window.open = function(open) {
    return function(url) {
        console.log("url", url);
        staticVar = true;
        // need to works here event.stopPropagation();
        return open.call(window, url);
    };
}(window.open);

document.onclick = clickListener;
function clickListener() {
	if(!staticVar) {
		console.log("click")
	}
	staticVar = false;
};
function openLink() {
    window.open('https://www.google.com');
}
<button onclick="openLink()">open link</button>