proxy.register()
Устаревший: Эта функция больше не рекомендуется. Хотя некоторые браузеры могут её всё ещё поддерживать, она, возможно, уже удалена из соответствующих веб-стандартов, может быть в процессе удаления или сохраняется только для совместимости. Избегайте её использования и, при возможности, обновите существующий код; см. таблицу совместимости внизу этой страницы, чтобы принять решение. Помните, что эта функция может перестать работать в любой момент.
Предупреждение: Этот метод был устаревшим в Firefox 68 и удалён в Firefox 71. В Firefox 68–70 вызов этого метода записывает сообщение об ошибке в консоль:
Регистрирует файл автоконфигурации прокси (PAC). Файл выполняется немедленно, и его FindProxyForURL() функция будет вызвана для всех запросов HTTP или HTTPS.
Если файлы PAC зарегистрированы более чем одним расширением, запросы будут первоначально переданы тому, который был зарегистрирован первым.
- Если
FindProxyForURL()функция первого PAC возвращает "DIRECT" для запроса, запрос передаётся без изменений вFindProxyForURL()функцию следующего PAC. - Если
FindProxyForURL()функция первого PAC проксирует запрос, вернув "PROXY" или какое-либо другое значение проксирования, URL прокси передаётся вFindProxyForURL()функцию следующего PAC.
Каждое расширение может зарегистрировать только один файл PAC: если вы вызываете register() дважды, второй файл PAC заменит первый.
Это асинхронная функция, которая возвращает Promise.
Общение с файлами PAC
Вы можете обмениваться сообщениями между файлом PAC и страницей фонового скрипта вашего расширения (или любой другой страницы с привилегиями, например, страницей всплывающего окна) с помощью runtime.sendMessage() и runtime.onMessage.
Чтобы отправить сообщение в файл PAC, необходимо установить опцию toProxyScript:
// background.js // Log any messages from the proxy. browser.runtime.onMessage.addListener((message, sender) => { if (sender.url === browser.extension.getURL(proxyScriptURL)) { console.log(message); } }); let messageToProxy = { enabled: true, foo: "A string", bar: 1234 }; browser.runtime.sendMessage(messageToProxy, {toProxyScript: true});
// pac.js browser.runtime.onMessage.addListener((message) => { if (message.enabled) { browser.runtime.sendMessage("I'm enabled!"); } });
Спецификация файла PAC
Базовая синтаксическая структура файла PAC описана в документации PAC, но реализация, используемая API прокси, отличается от стандартного дизайна PAC несколькими способами, которые описаны в этом разделе.
Значение возврата FindProxyForURL()
Стандартная FindProxyForURL() возвращает строку. В Firefox 55 и 56 файл PAC, используемый с API прокси, также возвращает строку. В Firefox 55 только вы должны передавать аргумент в значение возврата "DIRECT", даже если он не требует аргумента.
Начиная с Firefox 57, FindProxyForURL() может по-прежнему возвращать строку, но в качестве альтернативы (и предпочтительно) возвращает массив объектов proxy.ProxyInfo.
Если массив содержит более одного объекта, все ProxyInfo объекты после первого представляют собой резервные варианты: если прокси в позиции N в массиве недоступен, когда срок действия его ProxyInfo.failoverTimeout истекает, браузер попробует прокси в позиции N+1.
Например:
const proxySpecification = [ { type: "socks", host: "foo.com", port: 1080, proxyDNS: true, failoverTimeout: 5 }, { type: "socks", host: "bar.com", port: 1060, } ];
Первый прокси в массиве будет проверен в первую очередь. Если он не ответит в failoverTimeout секунды, будет проверен следующий, и так до конца массива.
Окружение файла PAC
Глобальные вспомогательные функции, обычно доступные для файлов PAC (isPlainHostName(), dnsDomainIs() и т. д.) недоступны.
Код, выполняемый в файле PAC, не получает доступ к:
- любым функциям DOM (например, window или любым его свойствам)
- каким-либо API WebExtension, кроме
runtime.sendMessage()иruntime.onMessage - API консоли Console API — для регистрации сообщений из PAC отправьте сообщение в фоновый скрипт:
// pac.js // send the log message to the background script browser.runtime.sendMessage(`Proxy-blocker: blocked ${url}`);
// background-script.js function handleMessage(message, sender) { // only handle messages from the proxy script if (sender.url !== browser.extension.getURL(proxyScriptURL)) { return; } console.log(message); } browser.runtime.onMessage.addListener(handleMessage);
Синтаксис
let registering = browser.proxy.register( url // string )
Параметры
url-
String. URL, указывающий на файл PAC для загрузки. Файлы PAC должны быть включены в расширение, иurlдолжен быть относительным к файлу manifest.json расширения.
Значение возврата
A Promise, который будет выполнен без аргументов, когда файл PAC будет зарегистрирован, или отклонен, если произошла ошибка.
Примеры
const proxyScriptURL = "proxy/proxy-script.js"; browser.proxy.register(proxyScriptURL);
Совместимость с браузерами
| Рабочий стол | Мобильные устройства | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Internet Explorer | Opera | Safari | WebView Android | Chrome Android | Firefox для Android | Opera Android | Safari на IOS | Samsung Internet | |
register |
Нет | Нет | 56–7155–71 | ? | Нет | Нет | ? | ? | 56–7955–79 | ? | Нет | ? |
Примечание: Данные о совместимости Microsoft Edge предоставлены компанией Microsoft и включены здесь в соответствии с лицензией Creative Commons Attribution 3.0 United States License.
© 2005–2023 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/proxy/register