Spec-Zone.ru › Web Extensions

Работа с userScripts

Реализуя userScripts, разработчики расширений могут изменять внешний вид и/или работу сайтов, чтобы лучше удовлетворить потребности пользователей.

Реализуйте userScripts в вашем расширении, выполнив следующие шаги:

  1. Определите скрипт в манифесте расширения, используя ключ "user_scripts".
  2. Зарегистрируйте userScript.
  3. Реализуйте функции userScript.

Давайте рассмотрим процесс на примере небольшого веб-расширения, иллюстрирующего этот процесс. Пример доступен в репозитории webextensions-examples на GitHub.

Манифест userScripts

Скрипт userScript идентифицируется содержимым ключа user_scripts манифеста расширения. Минимальная информация для ключа user_scripts будет:

  "user_scripts": {
    "api_script": "customUserScriptAPIs.js"
  }

Свойство "api_script" указывает путь к файлу JavaScript, содержащему код для userScript.

Загрузка примера расширения

После загрузки примера:

Перейдите в about:debugging, нажмите Загрузить временное дополнение… и дважды щелкните манифест расширения.

Включенный в пример по умолчанию код позволяет загрузить userScript, который "съест" содержимое страниц, соответствующих записи Hosts. Внесите необходимые изменения, прежде чем нажать кнопку Зарегистрировать скрипт в нижней части панели.

На изображении ниже расширение "съест" содержимое страниц, доменное имя которых заканчивается на .org. Это поведение по умолчанию для этого расширения.

User script example

Ничего не произойдет, пока не будет нажата кнопка Зарегистрировать скрипт. Кнопка реализует user script в соответствии с настройками в этом диалоговом окне. Это означает, что вы можете экспериментировать с поведением скрипта, не реализуя расширение самостоятельно.

Регистрация userScript

Прежде чем userScript может быть выполнен, он должен быть зарегистрирован с помощью метода userScripts.register(). Вот код для регистрации примера расширения:

async function registerScript() {
  const params = {
    hosts: stringToArray(hostsInput.value),
    code: codeInput.value,
    excludeMatches: stringToArray(excludeMatchesInput.value),
    includeGlobs: stringToArray(includeGlobsInput.value),
    excludeGlobs: stringToArray(excludeGlobsInput.value),
    runAt: runAtInput.value,
    matchAboutBlank: stringToBool(matchAboutBlankInput.value),
    allFrames: stringToBool(allFramesInput.value),
    scriptMetadata: {name: scriptNameInput.value || null},
  };

  // Store the last submitted values to the extension storage
  // (so that they can be restored when the popup is opened
  // the next time).
  await browser.storage.local.set({
    lastSetValues: params,
  });

  try {
    // Clear the last userScripts.register result.
    lastResultEl.textContent = "";

    await browser.runtime.sendMessage(params);
    lastResultEl.textContent = "UserScript successfully registered";
    // Clear the last userScripts.register error.
    lastErrorEl.textContent = "";

    // Clear the last error stored.
    await browser.storage.local.remove("lastError");
  } catch (e) {
    // There was an error on registering the userScript,
    // let's show the error message in the popup and store
    // the last error into the extension storage.

    const lastError = `${e}`;
    // Show the last userScripts.register error.
    lastErrorEl.textContent = lastError;

    // Store the last error.
    await browser.storage.local.set({lastError});
  }
}

Этот код сначала инициализирует объект params для передачи значений методу userScripts.register.

Реализация функций userScript

После регистрации скрипта перейдите на страницу, доменное имя которой заканчивается на .org, и вы увидите что-то подобное:

Status message indicating that websites ending in .org have been eaten: "This page has been eaten. {"OldStoredValue:" "website address", "NewStoredValue:" "website address"}"

См. также

  • userScripts
  • userScripts.register()
  • userScripts.onBeforeScript

© 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/userScripts/Working_with_userScripts

Spec-Zone.ru

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