Ошибка примера API CHROME WebRequest: «onBeforeRequest» можно использовать только в процессах расширения - PullRequest
5 голосов
/ 22 ноября 2011

Я пытаюсь протестировать пример WebRequest API , но выдает ошибку:

«onBeforeRequest» можно использовать только в процессах расширения. manifest.json:

{
    "name": "example",
   "version": "1.0",
  "permissions": [
    "experimental",
    "http://*/*", "https://*/*"
  ],
    "content_scripts": [ {
      "js": [ "foo.js" ],
      "matches": [ "http://*/*", "https://*/*" ],
      "run_at": "document_start"
   } ]
}

foo.js является именно примером 1

Ответы [ 2 ]

11 голосов
/ 22 ноября 2011

Функции расширения Chrome (включая API webRequest) нельзя использовать в скриптах содержимого (foo.js в вашем примере). Если вы хотите использовать webRequest из скрипта контента, вы можете использовать функцию message для общения с фоновой страницей расширения . Фоновая страница может напрямую использовать webRequest и ретранслировать ответ (если есть) обратно в скрипт содержимого.

1 голос
/ 08 февраля 2017

Вам необходимо добавить фоновую страницу в файле манифеста и соответствующие разрешения в манифесте, чтобы фоновая страница могла получить доступ к API-интерфейсам webRequest.См. Этот пример: chrome.webRequest не работает?

Как уже упоминал Михай, если вам нужно, чтобы скрипт содержимого выполнил действие, проверьте эту страницу: https://developer.chrome.com/extensions/messaging

Добавьте это в свой контент-скрипт (вы можете изменить приветствие на действие и привет, какое действие должен выполнить фоновый скрипт):

chrome.runtime.sendMessage({greeting: "hello"}, function(response) {
   console.log(response.farewell);
});

Добавить это на фоновую страницу (вы можете сделать это, если операторы и peformразличные действия, основанные на сообщении):

chrome.runtime.onMessage.addListener(
  function(request, sender, sendResponse) {
    console.log(sender.tab ?
                "from a content script:" + sender.tab.url :
                "from the extension");
    if (request.greeting == "hello")
      sendResponse({farewell: "goodbye"});
  });
...