Как предотвратить появление предупреждений при использовании хромовых расширений? [Дубликат]

Ну, простыми словами:

Вы пытаетесь получить доступ к объекту, который не создан или в настоящее время не находится в памяти.

Итак, как это решить:

  1. Отладить и отпустить отладчик ... Он сразу приведет вас к переменной, которая сломана ... Теперь ваша задача - просто исправить это. Используя новое ключевое слово в соответствующем месте.
  2. Если это вызвано некоторыми командами базы данных, потому что объект отсутствует, все, что вам нужно сделать, это выполнить нулевую проверку и обработать его:
    if (i == null) {
        // Handle this
    }
    
  3. Самый сложный. если GC уже собрал объект ... Это обычно происходит, если вы пытаетесь найти объект, используя строки ... То есть, найдя его по имени объекта, может случиться, что GC, возможно, уже очистил его ... Это трудно найти и станет проблемой. Лучшим способом решения этой проблемы является выполнение нулевых проверок везде, где это необходимо в процессе разработки. Это сэкономит вам много времени.

Поиск по имени означает, что некоторые фреймворки позволяют использовать FIndObjects с помощью строк, а код может выглядеть так: FindObject («ObjectName»);

9
задан skaffman 5 June 2010 в 20:53
поделиться

3 ответа

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

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;};";
-5
ответ дан Drew LeSueur 27 August 2018 в 10:00
поделиться
  • 1
    как вы получаете что-либо в этом & quot; javascript: & quot; контекст? Когда я пытаюсь это сделать, я не могу назвать какие-либо из моих функций. – David Jeske 11 February 2015 в 21:11
  • 2
    Не уверен, извините. Это может быть устаревшим ответом. Интересно, почему у него так много голосов. Я думаю, может быть, проблема в том, что @MrGlass прокомментировал ответ на предыдущий вопрос. – Drew LeSueur 12 February 2015 в 16:39

Как сказал @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*/ 
    };

};

Теперь, что мы собираемся сделать, это преобразовать эту функцию в текстовый скрипт и заключить ее в круглые скобки (чтобы избежать возможных конфликтов с фактическими vars в среде страницы):

var disablerCode = "(" + disablerFunction.toString() + ")();";

И, наконец, мы добавляем элемент скрипта и сразу удаляем его:

var disablerScriptElement = document.createElement('script');
disablerScriptElement.textContent = disablerCode;

document.documentElement.appendChild(disablerScriptElement);
disablerScriptElement.parentNode.removeChild(disablerScriptElement);
10
ответ дан Daniel Möller 27 August 2018 в 10:00
поделиться

Да, вы можете, 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

14
ответ дан Mohamed Mansour 27 August 2018 в 10:00
поделиться
  • 1
    Этот метод больше не работает = javascript в скрипте содержимого изолирован от главной страницы. Это изменяет функцию оповещения в скрипте содержимого, но не на главной странице. – MrGlass 21 April 2013 в 19:26
  • 2
    Это правда @MrGlass. См. Мой ответ, чтобы узнать, как это можно обойти. – Daniel Möller 5 February 2017 в 14:07
Другие вопросы по тегам:

Похожие вопросы: