2010-07-10 2 views
1

Я прочитал документацию и понять, что это следовало ожидать:Инъекция Сценарии Исполнительной несколько раз

Сценариев инъецируют страницы верхнего уровня и все ребенок с источниками HTML, например фреймами. Не предполагайте, что на вкладке браузера есть только один экземпляр вашего скрипта.

Я интересно, хотя:

  1. Помимо фреймов, что другие элементы имеют "HTML источники" (изображения объектов?)? Термин «источники HTML» неудобен для моих ушей.
  2. Есть ли способ определить, какой элемент выполняет скрипт?

Я отфильтрованы Iframes путем определения того, что window === window.top, как это было рекомендовано, но и другие элементы по-прежнему выполняет сценарий, и это выполнение много больше, чем хотелось бы.

Спасибо.

ответ

2

Это действительно моя собственная ошибка, что я отвечаю на свой вопрос, потому что на самом деле я не предоставлял достаточно информации в своем вопросе. В свою защиту я не знаю в то время, когда я предоставлял слишком мало информации.

Во всяком случае, во время путешествия по дороге к раствору для этого, I asked a question on Apple's dev forum и включал в себя следующий фрагмент ключа информации:

  • Все в скрипте происходит на beforeload случае document (или должен был).

Я узнал, что событие beforeload срабатывает только для подресурсов внутри документа. Не для самого документа (или окна). Я удалил обработчик событий и убедился, что скрипт был применен в качестве стартового скрипта (он был). Я уже применил тест для окна в качестве верхнего окна, чтобы я был закрыт. Теперь мой сценарий инъекций срабатывает только один раз.

0

Другие источники HTML могут быть фреймами или объектными тегами (с содержимым HTML). Я не думаю, что это может быть что-то еще. Однако, насколько я знаю, они также должны быть отфильтрованы с помощью window === window.top. Попробуйте console.log с переменной document.location, чтобы увидеть, какой URL-адрес запускает ваш скрипт, и, возможно, вы можете найти, что загружает их.

Смежные вопросы