0

這是我現在有一個後臺腳本:Chrome擴展程序,是否可以模擬後臺腳本中的「返回」?

chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) { 
     if (tab.url.indexOf("developer.apple.com/reference") != -1 && tab.url.indexOf("?language=objc") == -1) { 
      var objcURL = tab.url + "?language=objc"; 
      history.back(); 
     } 
}); 

我正確地進入if塊,但history.back()似乎並沒有做任何事情。我試過history.go(-1),我確信我的清單權限設置了「歷史記錄」

這是不可能從鉻擴展中的後臺腳本執行的嗎?

+0

我不確定在後臺腳本中是否有可能,但嘗試使用內容腳本將注入將加載前一頁的腳本。請參閱相關的[SO帖子](http://stackoverflow.com/a/9517879/5995040),這將解釋如何使用內容腳本在頁面中注入代碼。希望這可以幫助。 –

+0

如果您的聽衆事件完全沒有解除,該怎麼辦? –

回答

3

正如Rebot先生所說,問題在於您在後臺腳本中執行history.back();而不是您想要返回的選項卡。一個簡單的解決方法是使用chrome.tabs.executeScript來運行js在當前標籤中。因此,您只需將history.back();替換爲chrome.tabs.executeScript(null,{"code": "window.history.back()"});此外,歷史記錄權限允許您讀取和寫入瀏覽器歷史記錄,因此您無需使用此歷史記錄即可工作。然而,你需要注入以下權限:[ "tabs", "http://*/*", "https://*/*" ]最後,我不得不說使用chrome.tabs.executeScript仔細,它不比eval()更好,但只要你不用window.history.back();替換你的變量應該可以。另外,如果您想在當前頁面以外的頁面中運行代碼,則可以將空值替換爲要將代碼注入到的選項卡的ID。更多的文檔可以在Chrome API頁面找到here

+0

感謝您的完美答案。你的賬戶歷史非常有趣..我很驚訝你回答這個老問題,但是謝謝你的時間!爲我節省了很多頭痛 –

相關問題