首页 > 解决方案 > window.setTimout 中的动态代码评估代码注入

问题描述

我执行了以下代码来处理浏览器中的弹出窗口被阻止的情况。但是我们在 setTimeout 函数中面临一个强化的关键问题。有人可以帮我解决这个问题吗

var myWindow = window.open("", '_blank');
if (myWindow != undefined) {
  window.setTimeout(function() {
    myWindow.document.write(text);
    myWindow.focus();
    myWindow.document.title = name;
  }, 100);
} else {
  showWarning({
      message: 'popup is blocked')
  });
} // here

标签: javascriptsettimeoutfortify

解决方案


问题不在于设置的超时。

当您执行 window.open 时,它被阻止程序阻止,但如果您查看返回数据,myWindow 将是一个空对象。因此,这意味着您将遇到 if else 的 else 部分。

将代码更改为:

var myWindow = window.open("", '_blank');
if (Object.keys(myWindow).length !== 0) {
    window.setTimeout(function () {
        myWindow.document.write(text);
        myWindow.focus();
        myWindow.document.title = name;
    }, 100);
} else {
    showWarning({message: 'popup is blocked')});           
}

推荐阅读