Открыть страницу настроек из контент-скрипта по нажатию кнопки? - PullRequest
0 голосов
/ 03 декабря 2018

Я пытаюсь открыть страницу параметров своего веб-расширения с помощью вставленной кнопки с помощью скрипта контента на странице.Вот настройка:

настройка манифеста:

"options_ui": {
    "page": "options/options.html",
    "open_in_tab":true
},
"web_accessible_resources": ["icons/icon.png", "icons/icon64.png","options/options.html"]

content-script.js:

<a href="moz-extension://1f82d05-3abf-4bea-80e2-db87e97486d3/options/options.html" target="_blank">Settings</a>

Что мне здесь не хватает?Кроме того, я знаю, что moz-extension: может быть не лучшим вариантом для кросс-браузерной работы, но не уверен, какой должен быть правильный namesapce?

РЕДАКТИРОВАТЬ:

Яиспользуя фиксированный идентификатор в манифесте как:

"applications": {
        "gecko": {
            "id": "{adacfr40-acra-e2e1-8ccb-e01fd0e08bde}"
        }
},

1 Ответ

0 голосов
/ 03 декабря 2018

Ваш скрипт контента , как показано, на самом деле представляет собой кусок HTML, а не JavaScript, как ожидалось.Так что это не сработает.Возможно, это не ваш реальный код, а то, что вы создаете?

Но предположим, что вы действительно настраиваете скрипт контента, чтобы добавить кнопку и подключить слушателя (я думаю, что это выходит за рамки этого вопроса).Как открыть страницу параметров?

канонический способ - вызвать browser.runtime.openOptionsPage(), но этот API нельзя вызвать из скрипта содержимого.

Два варианта:

  1. Палка с openOptionsPage().В этом случае вам нужна фоновая страница (событие), которая прослушивает Messaging, а затем сигнализирует из скрипта содержимого , что вы хотите открыть страницу параметров.

    Преимущество этого подхода заключается в том, чточто вам не нужно сделать веб-страницу параметров доступной.

  2. Если вы настаиваете на прямом открытии страницы из тега сценария содержимого / a, вы можете, но вам нужно получить динамически назначаемый UUID для вашего расширения экземпляр .

    URL-адрес страницы параметров не является фиксированным, но должен быть получен с помощью browser.runtime.getURL("options.html") и этот URL следует использовать при создании ссылки.

    Этот метод требует объявления его доступным через Интернет.

...