Отправка сообщения с сайта в расширение Chrome.Как я должен знать удостоверение личности? - PullRequest
0 голосов
/ 14 февраля 2019

В документации Chrome здесь указано, что в вашем манифесте расширения необходимо добавить следующее:

{
  "name": "My externally connectable extension",
  "externally_connectable": {
    // Extension and app IDs. If this field is not specified, no
    // extensions or apps can connect.
    "ids": [
      "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
      "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
    ],
    "matches": [
      "https://*.example.com/*",
    ],
  },
}

Далее будет сказано, что для отправки сообщения отна вашем веб-сайте в расширение Chrome, вам необходимо передать идентификатор расширения в качестве первого параметра функции sendMessage

// The ID of the extension we want to talk to.
var editorExtensionId = "abcdefghijklmnoabcdefhijklmnoabc";

// Make a simple request:
chrome.runtime.sendMessage(editorExtensionId, {openUrlInEditor: url},
  function(response) {
    if (!response.success)
      handleError(url);
  });

В этом и заключается проблема.Когда установлено расширение Chrome, ему присваивается случайный идентификатор.Например, в моей разрабатываемой сборке мой ПК-инсталлятор имеет другой идентификатор, чем мой MacOS-инсталлятор.Таким образом, расширение работает только на платформе с правильным идентификатором.

Когда я загружаю расширение в хранилище Chrome, как я узнаю, какой идентификатор он получает, чтобы определить этот идентификатор вфайл манифеста моих расширений и на моем сайте?

Ответы [ 3 ]

0 голосов
/ 15 февраля 2019

Ваш веб-сайт должен попытаться подключиться к списку известных идентификаторов расширений и использовать тот, который удастся. Chrome Cast SDK делает нечто подобное.

Это также позволяет загружать бета-версию в веб-магазин с той же кодовой базой;веб-сайт будет подключаться к нему, если он установлен.

Вам необходимо будет загрузить расширение хотя бы один раз, чтобы получить идентификатор, который останется стабильным для будущих версий в веб-магазине.

Вы можете предсказать идентификатор разработки, но вы также можете просто скопировать и вставить его после того, как Chrome сгенерирует его для вас.

>>> t=str.maketrans('0123456789abcdef','abcdefghijklmnop')
>>> hashlib.sha256(b'/Users/josh/junk/26053434').hexdigest()[:32].translate(t)
'odalipbppffphnakilnfmbicajbmomim'
>>> hashlib.sha256(b'C:\\Users\\josh\\junk\\26053434').hexdigest()[:32].translate(t)
'ebikiconcdlacnflflaalbbeinepnnmf'

(Например, путь к Windows вполне может использовать косую черту иначать с file://…)

Фактический процесс проверки связи с расширением может быть таким же runtime.sendMessage / runtime.connect кодом, но он также может использовать web_accessible_resources с fetch или скриптомтег (это то, что делает Cast SDK)

Если вам необходимо получить доступ к расширению development с production веб-сайта, вам понадобится какой-нибудь способ внедрениявнутренний идентификатор.Самое простое - открыть консоль, написать localStorage.myExtensionId='aaabbb' и перезагрузить.

0 голосов
/ 15 февраля 2019

Я разобрался, как это сделать.

Что вам нужно сделать, это загрузить свой ZIP-файл на портал разработчиков Chrome WebStore.

Как только это будет сделано, вверху будет сгенерированоИдентификатор, который вы можете жестко закодировать на своем веб-сайте или в расширении.

Чтобы затем убедиться, что этот идентификатор всегда используется при разработке, вы должны перейти в раздел Package и затем загрузить файл crx.

enter image description here

Установите этот файл CRX в вашу установку Chrome, а затем перейдите в папку установки для этого расширения:

C:/Users/<User>/AppData/Local/Google/Chrome/User Data/Default/Extensions/<extension-id>/

Откройте manifest.json файл и внутри есть значение с именем key.Если вы скопируете это в ваши версии manifest.json для разработки, он скажет Chrome всегда использовать идентификатор, который ему дал интернет-магазин.

Удалите установленную версию интернет-магазина и продолжайте разработку

0 голосов
/ 14 февраля 2019

Идентификатор расширения не изменится после его загрузки в Chrome Web Store (CWS).Таким образом, вам нужно будет использовать только этот идентификатор.

Например, идентификатор расширения Adblock gighmmpiobklfepjocnamgkkbiglidom, который присутствует в ссылке CWS: https://chrome.google.com/webstore/detail/adblock/gighmmpiobklfepjocnamgkkbiglidom.

Да, этоменяется каждый раз, когда вы загружаете расширение в режиме разработки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...