Могу ли я предотвратить оповещение () с помощью расширения Google Chrome - PullRequest
13 голосов
/ 03 июня 2010

Можно ли создать расширение Google Chrome, чтобы страница не выполняла alert()?

Ответы [ 3 ]

16 голосов
/ 05 июня 2010

Да, вы можете, alert () - это просто метод JavaScript, вы можете переопределить его функциональность, выполнив.

window.alert = function alert(msg) {
  console.log('Hidden Alert ' + msg);
};

Только не забудьте запустить этот скрипт контента в document_start внутри манифеста через модификатор скрипта контента манифеста run_at.

Я считаю, что есть расширение, которое просто делает это. Разработчик называет это Nice Alert. https://chrome.google.com/extensions/detail/ehnbelnegmgdnjaghgomaakjcmpcakhk

11 голосов
/ 05 февраля 2017

Как сказал @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);
0 голосов
/ 05 июня 2010

Спасибо. Это помогло. Тем не менее, я понял, что мне нужно сделать это, чтобы заставить его работать

location.href="javascript: window.alert = function(x) {console.log(x)};"

если я хочу удалить оповещения и подтверждения, я могу сделать

location.href="javascript: window.alert = function(x) {console.log(x)}; window.confirm = function(){return true;};";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...