Spec-Zone.ru › Web Extensions

proxy.register()

Устаревший: Эта функция больше не рекомендуется. Хотя некоторые браузеры могут её всё ещё поддерживать, она, возможно, уже удалена из соответствующих веб-стандартов, может быть в процессе удаления или сохраняется только для совместимости. Избегайте её использования и, при возможности, обновите существующий код; см. таблицу совместимости внизу этой страницы, чтобы принять решение. Помните, что эта функция может перестать работать в любой момент.

Предупреждение: Этот метод был устаревшим в Firefox 68 и удалён в Firefox 71. В Firefox 68–70 вызов этого метода записывает сообщение об ошибке в консоль:

Proxy register error message

Регистрирует файл автоконфигурации прокси (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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API