API расширения Chrome v17: webRequest onErrorOccurred.addListener - PullRequest
1 голос
/ 25 января 2012

Я пытаюсь настроить расширение Chrome, подобное http://code.google.com/chrome/extensions/trunk/samples.html#webrequest, за исключением того, что вместо прослушивания запроса get по какой-либо причине мы будем перенаправлять на определенную известную страницу, когда запрос get завершается неудачей.

manifest.json:

{
  "name": "Custom Error",
  "version": "0.1",
  "description": "Redirect all navigation errors to specified location/file.",
  "permissions": [
    "webRequest",
    "tabs",
    "<all_urls>"
  ],
  "background": {
    "page": ["error_listener.html"]
  }
}

error_listener.html:

<!doctype html>
<script>
  chrome.webRequest.onErrorOccurred.addListener(
      function onErrorOccurred(details) {
        console.log('onBeforeRequest ', details.url);
        return { redirectUrl: 'http://www.google.com' }
      }, 
      {urls: ["<all_urls>"]}
      //{urls: ["http://*/*", "https://*/*"]}
  );
        //chrome.tabs.update(details.tabId, {url: "http://www.google.com", ['blocking']});
        //alert("what?");
</script>

Расширение загружается без указанных ошибок, но вкладка браузера не перенаправляется. Я пробовал это использовать Chrome 16 и Chrome 17; при использовании Chrome 16 я изменил «chrome.webRequest» на «chrome.experimental.webRequest» и добавил «экспериментальный» в список разрешений.

Пока что кажется, что проблема заключается в том, что, хотя расширение выглядит загруженным, если смотреть на расширения chrome: //, файлы фактически не загружаются - при использовании Инструментов разработчика я не вижу никакой ссылки на error_listener .html.

Я также пытался запустить Chrome 17 со следующими флагами:

8611  25/01/12-11:22:05> google-chrome --restore-last-session 
--debug-on-start --log-level=0 --enable-logging 
--enable-extension-activity-logging --enable-extension-alerts 
--debug-plugin-loading --debug-print | tee > log1.txt

Очевидно, я просто как бы ковыряюсь в темноте с этой командной строкой. У кого-нибудь есть какие-либо подсказки относительно того, как заставить это работать? Заранее спасибо за помощь!

Ответы [ 2 ]

2 голосов
/ 14 июня 2012

Нет события webRequest.onErrorOccurred. Вы можете использовать webNavigation.onErrorOccurred. Если вы хотите отлавливать ошибки DNS и перенаправлять на другой URL, вы можете использовать код:

<script>
chrome.webNavigation.onErrorOccurred.addListener(function(details) 
{
    if (details.frameId != 0) //ignore subframes. 0 is main frame
    { return; }

    chrome.tabs.update(details.tabId, {url: "https://www.google.com/search?q=" + details.url});
});
</script>
1 голос
/ 25 января 2012

В Chrome 16 вы должны использовать:

"background_page": "background.html"

вместо

"background": {
    "page": ["error_listener.html"]
}

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

...