2013-09-26 2 views
1

Я пишу приложение XUL, которое записывает всю сетевую связь, происходящую внутри экземпляра браузера, созданного с использованием тега <browser>.Разграничение между HTTP-запросами плагина и HTTP-запросами JavaScript

Я могу использовать http-on-modify-request для отслеживания всех сделанных запросов и изменения заголовков соответственно, но я не могу отличить, какой запрос сделан плагином, например Flash, или если он был сделан JavaScript.

Есть ли способ, которым я могу отличить такие запросы?

ответ

1

Предупреждение, неприятный взлом входящих!

Вы определенно не можете отличить запросы от Flash против Javascript, так как они фактически используют одни и те же API платформы Mozilla.

Тем не менее, ничто не мешает вам сделать без вспышки запрос выглядеть по-разному при рассмотрении в http-on-modify-request реализации - вам нужно сделать что-то, чтобы сделать все эти без вспышки requets выглядят по-разному.

Самый простой способ, который я могу придумать, - добавить (а затем удалить внутри вашего обработчика http-on-modify-request) параметр QueryString.

Так что просто добавьте что-то вроде ?___NONFLASH__=897123487 или &___NONFLASH__=897123487 в каждый запрос URI. (где вы произвольно генерируете токен 897123487 при инициализации, так что JavaScript/Flash не может быть предсказан, чтобы «убежать» из этой «песочницы»).

Вы должны были бы повлиять на следующем браузере content.contentDocument:

  • ссылки - изменить их href атрибуты
  • формы - изменить их action атрибуты
  • window.XMLHttpRequest - заменить это с версией вашего собственного изготовления (сделать что вы замените его перед запуском любой клиент-скрипт!)

это просто оставляет клиента скрипт инициированное window -LEVEL на (например: window.location.href изменений). Вы можете использовать либо NSIObserver, либо NSIProgressListener, чтобы следить за изменением/повторной загрузкой URL.

редактировать: все это предполагает, что содержание вспышка не используется флэш-< -> JavaScript мост и делать все запросы на стороне JavaScript (маловероятно - но возможно!).