首页 > 解决方案 > 如何检测window.open

问题描述

我正在尝试解决一个场景,让我尝试用一​​个例子来解释。我有一个脚本,它尝试使用 window.open 方法打开一个新的 url。此脚本会在 5 秒后触发一个窗口打开,而用户没有任何点击事件。我想做的是..捕获窗口打开方法。是否有像 addEventListener 这样的函数来捕获窗口打开方法?我想跟踪不是由用户操作启动的 window.open。

谢谢林恩

setTimeout(function(){
window.open(url,name);
}, 5000); 

标签: javascriptwindow.open

解决方案


你可以更换它

注意:由于沙盒,window.open 在stackoverflow 中不起作用此外,浏览器可能会抑制未由用户操作触发的 window.open

const saveOpen = window.open;
window.open = function(url,windowName,parms) {
  console.log("triggered",url);
  saveOpen(url, windowName || "",parms || "")
};
const url = "https://stackoverflow.com", windowName="myWin"
setTimeout(function(){
  window.open(url,windowName);
}, 1000); 

如何在 javascript 中调用另一个窗口的函数?您可以将加载事件侦听器附加到窗口:

const loaded = function(str) { console.log(str) },
url = "https://stackoverflow.com", windowName="myWin";
setTimeout(function(){
  const w = window.open(url,windowName);
  if (w) w.addEventListener('load',function() { loaded(url)})
  else console.log('sorry, not allowed'); // this of course can be a call to whatever
}, 1000);


推荐阅读