javascript - 如何获得“未触及”的窗口对象?
问题描述
我有一个使用 window.open 方法的书签。
有时网站会修改此方法,因此我无法预测运行小书签的行为。
有没有办法获得一个“未触及”的窗口对象?
我尝试注入一个新的 iframe 并从中获取窗口对象,但随后 chrome 阻止了弹出窗口(请参阅https://bugs.chromium.org/p/chromium/issues/detail?id=932884)。
window.open("http://example.com");
解决方案
您可以通过使用并检查是否存在来检查该window.open
方法是否是本机代码。.toString()
[native code]
window.open.toString()
// returns: "function open() { [native code] }"
window.open.toString().includes('[native code]')
// returns: true
window.open = function() { console.log('ding!'); }
window.open.toString().includes('[native code]')
// returns: false
此外,您可以通过从原型中调用它来合理地确保.toString()
没有被覆盖。
Function.prototype.toString.call(window.open).includes('[native code]')
推荐阅读
- c++ - 如何在 Visual Studio 代码中设置“C_Cpp.intelliSenseMode”:“Tag Parser”
- android - 如何在 imageView 中创建可点击元素?
- javascript - 在构建时执行 NormalModule,加载器构建完成后,保存到 json 文件
- c# - 如何检测表中哪一列的值已更新
- javascript - 如何在reactjs中的map函数中设置选定元素的样式
- javascript - 如何将 azure 广告集成到在 azure 中也使用 REST API 的 React Web 应用程序
- javascript - 如何在模板标签上条件渲染 vue.js?
- python - 删除重复的列表元素-python
- keras - Keras seq2seq 填充
- php - 数据库中字符串的本地和生产解码之间的区别