2017-01-24 124 views
0

作爲我的第一個擴展,我嘗試使用chrome.webRequest API重新加載網頁,當網頁不可用時,Web服務器將請求重定向到另一個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

相關問題