Сценарий внедрения расширения Chrome перед загрузкой страницы - PullRequest
1 голос
/ 23 октября 2011

Я разрабатываю приложение 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 ();

Итак, я подумал о простом решении: ДО определения функции ie; function a1 () {..}, я хочу создать a1 как функцию CONSTANT, которая ничего не делает, поэтому делает вызов a1 () бесполезным.

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

Таким образом, альтернатива для запуска в той же среде выполнения - это INJECT код, использующий innerHTML + = "..."

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

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

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

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

Ответы [ 2 ]

1 голос
/ 23 октября 2011

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

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

0 голосов
/ 23 февраля 2012

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

const a1=function(){};

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

...