javascript - 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
解决方案
问题不在于设置的超时。
当您执行 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')});
}
推荐阅读
- django - Django Rest 框架应用程序中的关注点分离/DI
- python - 如何解决参数助手(WatsonServicesAssistant)的参数?
- unity3d - 与 sketchfab/unit3d/Iray 相比,低多边形模型 tris 的渲染在 three.js 中显示非常困难/标记
- php - 单击登录后网站崩溃--未捕获的错误:在 null 上调用成员函数 prepare()
- android - 如何在不使用 xml 的情况下在 Kotlin 中以编程方式使用 AndroidX 导航架构组件?
- c# - 限制文件操作
- python - 仅通过插入和删除查找编辑距离的变化?
- sql - 如何删除特定列中包含 2 个或更少字符的行?
- python - 同时在同一个 Python Socket 上发送和接收是否是线程安全的?
- node.js - 使用 node-sass 和 Node.js 将 scss 编译成 css