почему chrome.runtime не определен http, но отлично работает по https - PullRequest
0 голосов
/ 04 сентября 2018

Когда я отлаживаю javaScript на devtool.

   chrome.runtime

см. http://www.qq.com",it показать: chrome.runtime не определено. см. http preview .

Но когда я отлаживаю его на сайте https (https://www.qq.com). Он работает нормально. см https Предварительный просмотр .

подсказки: все сценарии выполняются в верхнем фрейме.

Могу ли я изменить "chorme: flags", чтобы включить его?

1 Ответ

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

Я понял почему сейчас.

"chrome.runtime.sendMessage" не существует, если расширение не установлено .--- начиная с chrome 66+. см: https://bugs.chromium.org/p/chromium/issues/detail?id=835287

Комментарий 29 от rdevlin .... @ chromium.org, 25 апреля По крайней мере, некоторые из эти случаи из-за дублированных ошибок, я думаю, что это было вызвано пересмотром 39f8939309fe39bccc17fa1280b6c7f25c411947. Это изменило свойство externally_connectable расширения компонента криптовалюты (автоматически встроен в Chrome), чтобы принимать только входящие соединения из https URL, тогда как ранее это были все URL. Когда это было установлено для всех URL всегда будет доступен chrome.runtime.sendMessage потому что любой URL потенциально может отправить сообщение в криптокен расширение компонента.

Тем не менее, это работает как задумано. Только криптотокен принимает соединения от источника https (так что любые другие будут игнорируется), и отправка сообщения на любое другое расширение потребует получающее расширение для перечисления URL в externally_connectable опции. Кроме того, это означает, что раньше любое расширение, полагающееся на на такое поведение, скорее всего, не удалось отправить сообщение, но сделано асинхронно (после того, как сообщение не смогло найти подходящий приемник), а не синхронно (поскольку время выполнения не определено). Если расширение перечисляет URL в externally_connectable, затем chrome.runtime все еще должен присутствовать. Если расширение не перечислите сайт в externally_connectable, тогда chrome.runtime не будет доступно предполагаемое поведение.

Есть ли случай, когда chrome.runtime не определен для chrome-extension без песочницы: // pages или для веб-страниц, где установленное расширение указывает URL этой веб-страницы в внешне подключаемое поле манифеста? Если да, пожалуйста, приложите расширение, которое демонстрирует эту проблему. Если нет, это звучит как WAI.

исправлено: добавить одно расширение с помощью: manifest.

"externally_connectable": {
    "ids": [
      "*"
    ],
    "matches": [
      "http://test.yoursite.in:9090/*",
      "*://*.chromium.org/*"
    ]
  },

думает все.

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