0

Hier ist, was ich habe jetzt in einem Hintergrundskript:Chrome Extension, ist es möglich, "Zurück" von einem Hintergrundskript zu simulieren?

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(); 
     } 
}); 

ich den if Block richtig am Eintritt, aber history.back() scheint nicht, etwas zu tun. Ich habe versucht, history.go(-1), und ich bin sicher, dass ich "Geschichte" in den Berechtigungen von meinem Manifest gesetzt haben

Ist dies nicht möglich, von einem Hintergrundskript in einer Chrome-Erweiterung zu tun?

+0

Ich bin mir nicht sicher, ob es in Hintergrundskript möglich ist, aber versuchen Sie, Inhaltsskript zu verwenden, das ein Skript einfügt, das die vorherige Seite lädt. In der zugehörigen [SO-Post] (http://stackoverflow.com/a/9517879/5995040) wird erläutert, wie Code mithilfe eines Inhaltsskripts in eine Seite injiziert wird. Hoffe das hilft. –

+0

Was ist, wenn Ihr Hörer-Ereignis überhaupt nicht ausgelöst wird? –

Antwort

3

Wie Herr Rebot sagte, ist das Problem, dass Sie die history.back(); im Hintergrundskript nicht die Registerkarte ausführen, in die Sie zurückgehen möchten. Eine einfache Umgehung ist die Verwendung von chrome.tabs.executeScript, um die js auszuführen in der aktuellen Registerkarte. Sie müssen also nur history.back(); durch chrome.tabs.executeScript(null,{"code": "window.history.back()"}); ersetzen. Außerdem können Sie mit der Verlaufsberechtigung den Browserverlauf lesen und schreiben, damit er nicht benötigt wird. Sie benötigen jedoch die folgenden Berechtigungen, um den Code zu injizieren: [ "tabs", "http://*/*", "https://*/*" ] Schließlich muss ich sagen, verwenden Sie chrome.tabs.executeScript vorsichtig, es ist nicht viel besser als eval(), aber solange Sie die window.history.back(); nicht durch eine Variable ersetzen Sie sollte in Ordnung sein. Wenn Sie den Code auf einer anderen Seite als der aktuellen Seite ausführen möchten, können Sie auch null durch die ID der Registerkarte ersetzen, in die Sie den Code einfügen möchten. Weitere Dokumentationen finden Sie auf der Chrome-API-Seite here.

+0

Danke für die perfekte Antwort. Dein Account-Verlauf ist sehr interessant. Ich bin überrascht, dass du diese alte Frage mitbekommen hast, aber danke für deine Zeit! Er hat mir viele Kopfschmerzen erspart –

Verwandte Themen