Расширение Chrome вводит скрипт перед загрузкой страницы

Я разрабатываю приложение Chrome на стороннем веб-сайте.

Документ, который я пытаюсь изменить, имеет следующий формат страницы:

<head>
.
.meta data here
.
</head>
<body>
  <script type="text/javascript">
    function a1(){
      ..contents of function a1
    }
  </script>

  .
  .other contents of body
  .
  <script type="text/javascript">
     a1();  // <-- I don't want this to be executed
  </script>
</body>

Моя проблема в том, что я хочу загрузить всю страницу, кроме вызова функции a1();

Поэтому я подумал о простом решении: ПЕРЕД определением функции, т.е. function a1(){..}, я хочу создать a1 как ПОСТОЯННУЮ функцию, которая ничего не делает, поэтому вызов a1() становится бесполезным.

Проблема в том, что если я определю функцию как постоянную в моем js, который запускается_в document_start, среда выполнения будет другой, поэтому она не повлияет на страницу.

Таким образом, альтернативой для запуска в той же среде выполнения является ВНЕДРЕНИЕ кода с использованием innerHTML+=" ... "

Другой альтернативой является создание элемента сценария с использованием «createElement», а src — это внешний файл js, который необходимо загрузить перед выполнением.

Обе альтернативы не работают, так как дерево синтаксического анализа не создается в сценарии run_at document_start.

Итак, я подумал о другом решении. Я добавил слушателей для события DOMModifySubTree, надеясь изменить последовательность синтаксического анализа (я знаю, это звучит забавно :)), чтобы функция не вызывалась. Не помогает.

Итак, мой вопрос: как предотвратить вызов функции a1() ?? P.S. Я не могу связаться со сторонним разработчиком веб-сайта.


person Akshaya Shanbhogue    schedule 23.10.2011    source источник
comment
когда вы говорите о приложении Chrome на стороннем веб-сайте, вы имеете в виду расширение Chrome, предназначенное для использования на одном стороннем сайте, веб-приложение, предназначенное только для браузера Chrome, или что-то еще?   -  person Matty H    schedule 23.10.2011


Ответы (2)


Greasemonkey — это то, что вам нужно.
Это Расширение Firefox, которое вставляет ваши собственные скрипты на выбранные вами веб-страницы.
Посетите wiki.greasespot. net, чтобы начать писать скрипты.

К счастью, Chrome изначально поддерживает сценарии Greasemonkey. Дополнительную информацию см. на этой странице.

person Brad Soto    schedule 23.10.2011
comment
Я нашел альтернативу. Спасибо, в любом случае. Решение было похоже на мои старые идеи. Я использовал window.location=javascript: const a1=function(){}; - person Akshaya Shanbhogue; 23.10.2011
comment
@Akshay Опубликуйте свое решение (плюс соответствующий код) в качестве ответа и примите его. Будущие пользователи SO могут найти ваше решение полезным. - person Rob W; 23.10.2011
comment
Я не знаю никаких конкретных подробностей о том, что вы пытаетесь переопределить, но вы можете быть осторожны, потому что ошибка переопределения предотвратит выполнение кода в том же блоке, в котором a1() изначально определено. Таким образом, вы можете нарушить некоторые функции на странице. - person gblazex; 23.10.2011

Извините за поздний ответ. Что я изначально сделал, чтобы пропустить вызов функции, так это то, что я запускал скрипт при запуске документа и вводил его в «документ» (поскольку JS работает в отдельном envi). В этом внедренном скрипте я использовал

const a1=function(){};

Таким образом, когда функция объявляется снова, она НЕ перезаписывается, следовательно, функция не выполняется (т. е. она выполняет нашу фиктивную функцию), тем самым существенно нарушая код. :)

person Akshaya Shanbhogue    schedule 23.02.2012