Определить, когда было установлено расширение Chrome, без встроенной установки - PullRequest
0 голосов
/ 15 сентября 2018

Как открыть вкладку, чтобы получить уведомление о том, что расширение Chrome было только что установлено, когда установка выполнялась через Интернет-магазин Chrome вместо встроенной установки?

Контекст

С июня 2018 года и далее В Chrome устарела встроенная установка , поэтому следующий механизм получения уведомлений, если расширение установлено , теперь не будет работать :

chrome.webstore.install(url, successCallback, failureCallback)

С этого момента расширения должны устанавливаться только через Интернет-магазин.

Мы создали расширение для общего доступа к экрану, которое позволяет предлагать пользователю поделиться своим экраном.

Когда наши пользователи нажимают «Общий экран», мы собираемся перенаправить их на расширение Chrome в Интернет-магазине и, как только они установят расширение, повторно активируют функцию «Общий экран».

1 Ответ

0 голосов
/ 16 сентября 2018

Вот как я решил это из фонового скрипта (без использования скрипта контента ):

background.js

  • Прослушивание события onInstalled.
  • Запрос всех открытых вкладок, соответствующих URL-адресам, которые вы хотите уведомить.
  • Выполните небольшой скрипт на каждой вкладке, который будет postMessage уведомлять эта установка прошла успешно.
chrome.runtime.onInstalled.addListener(function listener(details) {
  if (details.reason === chrome.runtime.OnInstalledReason.INSTALL) {
    chrome.tabs.query({
      url: [
        'https://localhost:3000/*',
        'https://staging.foo.com/*',
        'https://production.foo.com/*'
      ]
    }, tabs => {
      Array.from(tabs).forEach(tab => {
        chrome.tabs.executeScript(tab.id, {
          code: `window.postMessage('screenshare-ext-installed', window.origin);`
        });
      });
    });

    chrome.runtime.onInstalled.removeListener(listener);
  }
});

manifest.json

Просто убедитесь, что оба externally_connectable и permissions объявляют шаблоны URL сайтов, которые вы хотите уведомить.

"externally_connectable": {
    "matches": [
    "https://localhost:3000/*",
    "https://staging.foo.com/*",
    "https://production.foo.com/*"
  ]
},
"permissions": [
  "desktopCapture",
  "https://localhost:3000/*",
  "https://staging.foo.com/*",
  "https://production.foo.com/*"
],

Веб-страница

Просто слушайте где-нибудь сообщение postMessage, запущенное расширение на успешную установку.

window.onmessage = e => {
  if (e.data === 'screenshare-ext-installed') {
    // extension successfully installed
    startScreenShare()
  }
}

Кредиты

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