Как получить прокси для браузера из плагина NPAPI без использования xpcomglue?

Я разрабатываю плагин, и мне нужно получить прокси браузера для данного хоста.

Сейчас это работает с использованием nsIProtocolProxyService. Однако функция NewURI (необходимая для создания объекта URI, используемого nsIProtocolProxyService::resolve()) принимает константную ссылку на nsACString. И похоже, что для любой конкретной реализации мне нужно связать с xpcomglue, чего я не могу сделать (если я правильно понимаю, я не должен динамически связываться по техническим причинам; и я не могу связать статически с помощью xpcomglue_s по юридическим причинам).

Итак, как я могу получить браузерный прокси без привязки к xpcomglue?


person rincewind    schedule 08.02.2011    source источник


Ответы (2)


Это определенно сложный вопрос. Действительно, лучший способ (когда это возможно) — использовать функции NPAPI в стиле NPN_GetURL/NPN_PostURL, когда это возможно. Если это невозможно, вы более или менее в ручье, если вы не можете положиться на последнюю версию браузера.

Если вы можете предположить последнюю версию API Firefox/gecko (я почти уверен, что Firefox 3.6 поддерживает это, но не уверен, что это началось; в документах говорится, что gecko SDK 1.9, но я не думаю, что он был там в тот момент), тогда вы можно использовать NPN_GetValueForURL с NPNURLVProxy, чтобы получить информацию о прокси-сервере для данного URL-адреса.

Опять же, имейте в виду, что это будет работать только в более новых браузерах, и у меня еще не было возможности составить матрицу совместимости для того, что это поддерживает; У меня есть планы добавить это в FireBreath, но это не вошло в версию 1.4, так что это может произойти еще за месяц до этого. Я понимаю.

В качестве варианта отработки отказа наиболее распространенным решением, если это недоступно, является просто получение конфигурации прокси для WinInet (Internet Explorer) и уверенность в том, что она будет такой же.

Это (IMO) серьезная проблема без действительно хорошего решения. Это причина того, что Flash, как известно, непостоянен с сетевым доступом через прокси.

person taxilian    schedule 09.02.2011
comment
Большое спасибо! Я думаю, что могу ориентироваться на 3.6, так что это именно тот ответ, о котором я просил (у меня нет репутации, чтобы голосовать за ваш ответ). - person rincewind; 09.02.2011

Вы не должны разрабатывать плагины NPAPI, использующие XPCOM; см. документацию Mozilla. Возможно, вы могли бы использовать расширение Firefox, по крайней мере, для части того, что вы пытаетесь сделать, и общаться между ним и вашим плагином с помощью привязок JS.

person smorgan    schedule 09.02.2011
comment
Почему? Я выставляю сценарии плагинов через npruntime, но я думал, что все еще могу вызывать службы Mozilla через XPCOM. - person rincewind; 09.02.2011
comment
потому что он не будет работать ни на чем, кроме firefox — не на Chrome, Safari, Opera и т. д. - person taxilian; 09.02.2011
comment
Хорошо, я вижу. Ну, мне пока придется уйти с ним. - person rincewind; 09.02.2011