如何获得一个“不变的”窗口对象?

时间:2019-04-12 05:29:38

标签: javascript dom

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

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

有什么方法可以获取“未修饰的”窗口对象?

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

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

1 个答案:

答案 0 :(得分:1)

通过使用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]')