Я ищу способы расширить блокировку всплывающих окон Firefox из расширения. Один из вариантов - заменить window.open()
(или, скорее, Window.prototype.open()
) на веб-странице функцией-оберткой. Важным требованием является то, что эта манипуляция не может быть обнаружена или отменена веб-страницей. Например, если я просто сделаю это:
Window.prototype.open = wrapper;
Веб-страница может легко отменить изменение, выполнив:
delete Window.prototype.open;
Вместо этого я могу использовать Object.defineProperty () для установки флагов дополнительных свойств:
Object.defineProperty(Window.prototype, "open", {value: wrapper, configurable: false});
Веб-страница больше не может отменить это изменение, но все же может обнаружить его: delete Window.prototype.open
обычно изменяет значение Window.prototype.open
(другой экземпляр той же функции, как кажется), здесь delete
не будет иметь никакого эффекта совсем. Кроме того, Window.prototype.open = "test";delete Window.prototype.open;
будет давать противоречивые результаты (разные в зависимости от того, указан ли для свойства флаг writable: false
).
Есть ли что-нибудь еще, что я могу сделать, чтобы эмулировать поведение исходного свойства (кроме использования бинарных компонентов XPCOM, у которых слишком много собственных проблем)?