Как переопределить функцию оповещения с помощью usercript? - PullRequest
6 голосов
/ 11 января 2011

На сайте есть такой код (его сайт в локальной сети)

<script language="JavaScript" type="text/javascript">         
    alert("ble");
</script>

Я пытаюсь отключить это оповещение с помощью GM. Я пытался сделать это

unsafeWindow.alert=function() {};

но я вижу предупреждение и получаю эту ошибку

Error: uncaught exception: [Exception... "Component is not available"  nsresult: "0x80040111 (NS_ERROR_NOT_AVAILABLE)"  location: "JS frame :: file:///C:/Documents%20and%20Settings/arokitnicki/Dane%20aplikacji/Mozilla/Firefox/Profiles/sm4bsods.default/extensions/%7Be4a8a97b-f2ed-450b-b12d-ee082ba24781%7D/components/greasemonkey.js :: anonymous :: line 377"  data: no]

Как отключить это оповещение?

P.S. это НЕ вопрос javascript , а вопрос Greasemonkey .

EDIT:

Сайт его компании, поэтому я не могу вставить настоящий код

<head>
    <script>    
        dojo.require("dojo.back");
        dojo.back.init(); 
    </script>
</head>
<body onload="someMethod()">
    <iframe></iframe>
    <script>         
        alert("bla");
    </script>
</body>

В заголовке также есть несколько скриптов и объявлений CSS.

Ответы [ 2 ]

6 голосов
/ 11 января 2011

Обновление: Для современных версий Tampermonkey, Violentmonkey, Greasemonkey (но настоятельно рекомендуется избегать GM 4 +) :
Вы можете перехватить alert() в большинстве случаев, используя @run-at document-start. Например, загрузите этот скрипт и перейдите на тестовую страницу :

// ==UserScript==
// @name    _Overwrite Alert
// @match   *://output.jsbin.com/*
// @grant   none
// @run-at  document-start
// ==/UserScript==

var alrtScope;
if (typeof unsafeWindow === "undefined") {
    alrtScope = window;
} else {
    alrtScope = unsafeWindow;
}

alrtScope.alert = function (str) {
    console.log ("Greasemonkey intercepted alert: ", str);
};

Обратите внимание, что если вы используете Tampermonkey , вы можете блокировать предупреждения более эффективно, переключившись на Inject Mode: Instant:
Настройки Tampermonkey => Режим настройки: Advanced => Экспериментальный => Режим ввода: Instant.


Если вашему сценарию требуются функции GM_ , он должен установить @grant, отличный от none. В этом случае используйте exportFunction() примерно так:

// ==UserScript==
// @name            _Overwrite Alert
// @match           *://output.jsbin.com/*
// @grant           GM_addStyle
// @run-at          document-start
// ==/UserScript==

function myAlert (str) {
    console.log ("Greasemonkey intercepted alert: ", str);
}
unsafeWindow.alert   = exportFunction (myAlert, unsafeWindow);


Старый ответ для Greasemonkey до августа 2011 года:

unsafeWindow.alert=function() {}; отлично работает в некоторых ситуациях.

Но, если это действительно код на странице, вы не сможете остановить это предупреждение с помощью Greasemonkey.

Это связано с тем, что это оповещение сработает во время загрузки страницы и до события DOMContentLoaded - когда срабатывает Greasemonkey.


Загрузите этот скрипт GM:

// ==UserScript==
// @name            Overwrite Alert
// @description     Overwrites alert()
// @include         http://jsbin.com/*
// ==/UserScript==

unsafeWindow.alert=function() {};


Тогда посетите: http://jsbin.com/ajeqe4/6.

Проверка кода (http://jsbin.com/ajeqe4/6/edit),. Вы увидите 3 оповещения. Greasemonkey может только остановить оповещения, которые запускаются на load (обычно).

Другие факторы могут блокировать способность GM остановить предупреждение ... Возможно, страница загружается слишком быстро или закрывается.


Вставьте источник этой страницы, если это вообще возможно, неотредактированным, на pastebin.com. Там может быть что-то еще, что вы можете сделать. Может заблокировать скрипт через adblock?

В противном случае вам придется написать расширение / надстройку.

3 голосов
/ 07 марта 2011

Если вы используете Scriptish , то всегда будет работать следующее:

// ==UserScript==
// @id              alert-killer-test@erikvold.com
// @name            Overwrite Alert
// @description     Overwrites alert()
// @include         *
// @run-at          document-start
// ==/UserScript==

unsafeWindow.alert=function() {};

Вы можете получить скрипт пользователя здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...