首页 > 解决方案 > 如何获得“未触及”的窗口对象?

问题描述

我有一个使用 window.open 方法的书签。

有时网站会修改此方法,因此我无法预测运行小书签的行为。

有没有办法获得一个“未触及”的窗口对象?

我尝试注入一个新的 iframe 并从中获取窗口对象,但随后 chrome 阻止了弹出窗口(请参阅https://bugs.chromium.org/p/chromium/issues/detail?id=932884)。

window.open("http://example.com");

标签: javascriptdom

解决方案


您可以通过使用并检查是否存在来检查该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]')

推荐阅读