2017-01-24 4 views
0

Как мое первое расширение, я пытаюсь использовать API chrome.webRequest для перезагрузки веб-страниц, которые, когда они недоступны, веб-сервер перенаправляет запрос другому URL. Мое расширение будет продолжать проверять исходный запрос (tabs.reload), если обнаружено перенаправление (происходит событие onBeforeRedirect).Имейте chrome.tabs.reload() перезагрузите вкладку, отличную от активной вкладки

Все работает нормально, за исключением того, что я не могу запустить его на нескольких вкладках. Расширение может создать одну вкладку и продолжать перезагрузку, но когда я нажимаю значок расширения, чтобы открыть другую вкладку или когда я нажимаю на другие неактивные вкладки, background.js перестает работать.

Как я могу изменить его для запуска на нескольких вкладках (например, 5 вкладок одновременно) без остановки?

Вот background.js:

chrome.browserAction.onClicked.addListener(function(activeTab) { 
    var newURL = "https://myurl"; 
    chrome.tabs.create({ url: newURL }); 
}); 

chrome.webRequest.onBeforeRedirect.addListener(function (details) { 
    console.log("Redirect -> Reload"); 
    chrome.tabs.reload(); 
}, { 
    urls: ["http://*/*", "https://*/*"] 
}, ["responseHeaders"]); 

chrome.webRequest.onResponseStarted.addListener(function (details) { 
    console.log("Response Started"); 
    console.log(details.url); 
    console.log(details.statusLine); 
    if (details.url === "https://myurl" && details.statusCode === 200) { 
     console.log("Finally"); 
    } 
}, { 
    urls: ["http://*/*", "https://*/*"] 
}, ["responseHeaders"]); 

manifest.json:

{ 
    "name": "My Tool", 
    "description": "My Tool", 
    "version": "1", 
    "manifest_version": 2, 

    "browser_action": { 
    "default_icon": "icon.png" 
    }, 
    "background": { 
    "scripts": ["background.js"] 
}, 
    "permissions":[ 
    "https://myurl", 
    "http://redirectedurl", 
    "webRequest", 
    "webRequestBlocking", 
    "tabs" 
    ] 
} 
+0

Почему вы хотите ваше расширение перезагружать вкладки, когда URL перенаправляются ? Это очень редко для ответа сервера на переход от перенаправления на обслуживание страницы. – Makyen

+0

Я вижу некоторые возможные причины, по которым вам может потребоваться расширение для перезагрузки * определенных * вкладок или URL-адресов, которые перенаправляются (например, вы хотите лагерем по определенному URL-адресу до тех пор, пока не будет доступен ответ). Однако в этом случае вы бы хотели, чтобы он включался только для каждой вкладки или для каждого URL-адреса, а не для всех вкладок. Если он работает на всех вкладках без разбора, это может нарушить нормальный веб-серфинг. Вы также можете выполнить некоторую задержку между перезагрузками, чтобы ограничить, насколько сильно вы стучите по определенному URL-адресу и ресурсам, которые вы используете на локальном компьютере. – Makyen

+0

Да, это точная причина, по которой я хочу, чтобы мое расширение обновляло вкладки. Я не могу описать свой вопрос достаточно хорошо. В моем вопросе не было указателя _specific_ tab, _particulart_ URL. – piptan

ответ

1

В то время как я не проверял свой код, одна причина, он не будет работать на что-нибудь другое чем активная вкладка текущего окна, заключается в том, что вы не передаете аргумент chrome.tabs.reload(). Без аргумента он отказывается перезагружать активную вкладку в текущем окне независимо от того, какая вкладка фактически вызвала событие chrome.webRequest.onBeforeRedirect. Чтобы иметь вкладку, которая фактически инициировавший webRequest.onBeforeRedirect событие перезагружается, то вам нужно передать аргумент с вкладкой ID для chrome.tabs.reload(), что-то вроде:

chrome.tabs.reload(details.tabId); 
+0

Я много раз видел этот код во время поиска решения, но не понимал, что это так. Он работает как прелесть, когда я добавляю это к моему расширению. Благодарю. – piptan

 Смежные вопросы

  • Нет связанных вопросов^_^