Как сказал @MrGlass, в настоящее время расширения Chrome работают в отдельной среде, ограничивая доступ к реальному объекту window
и предоставляя дубликат, действительный только для расширения.
Чтобы решить эту проблему, мы можем вставить элемент скрипта непосредственно в документ. Таким образом, вы получаете доступ к среде документа и реальному window
объекту.
Во-первых, давайте создадим функцию (я также добавил «подтвердить», потому что некоторые подтверждения меня сильно раздражали):
var disablerFunction = function () {
window.alert = function alert(msg) { console.log('Hidden Alert ' + msg); };
window.confirm = function confirm(msg) {
console.log("Hidden Confirm " + msg);
return true; /*simulates user clicking yes*/
};
};
Теперь мы собираемся преобразовать эту функцию в текстовый скрипт и заключить ее в скобки (чтобы избежать возможных конфликтов с реальными переменными в среде страницы):
var disablerCode = "(" + disablerFunction.toString() + ")();";
И, наконец, мы внедряем элемент скрипта и немедленно удаляем его:
var disablerScriptElement = document.createElement('script');
disablerScriptElement.textContent = disablerCode;
document.documentElement.appendChild(disablerScriptElement);
disablerScriptElement.parentNode.removeChild(disablerScriptElement);