Как получить «нетронутый» объект окна? - PullRequest
0 голосов
/ 12 апреля 2019

У меня есть букмарклет, в котором используется метод window.open.

Иногда веб-сайты изменяют этот метод, поэтому я не могу предсказать поведение при запуске букмарклета.

Есть ли способ получить "нетронутый" объект окна?

Я пытался внедрить новый iframe и получить из него объект окна, но затем chrome блокирует всплывающее окно (см. https://bugs.chromium.org/p/chromium/issues/detail?id=932884).

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

1 Ответ

1 голос
/ 12 апреля 2019

Вы можете проверить, является ли метод 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]')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...