2013-07-30 20 views
5

Die Google Chrome-Erweiterungs-API bietet Informationen zum derzeit geöffneten Fenster unter Verwendung von chrome.devtools.inspectedWindow. Es werden jedoch keine Ereignisse für Änderungen bereitgestellt. Ich kann die Seite aktualisieren oder umleiten, und ich möchte das DevTools-Panel, das ich hinzufüge, um benachrichtigt zu werden. Gibt es dafür eine Methode?chrome.devtools.inspectedWindow Änderungsereignis

Denken Sie an das Bedienfeld Elemente, es bleibt immer auf dem neuesten Stand mit dem aktuellen DOM. Dies ist möglicherweise schwierig zu implementieren, um immer auf dem neuesten Stand zu bleiben, wenn eine DOM-Mutation auftritt, aber ich möchte zumindest informiert werden, wenn eine neue Seite geladen wird (wahrscheinlich beim document.onload-Ereignis, warum nicht)

Irgendwelche Ideen, wie dies zu implementieren, danke?

Antwort

10

Hören Sie eines der Ereignisse chrome.webNavigation und notify die Devtools, wenn eine Aktualisierung auftritt.

Eine andere Möglichkeit festzustellen, dass die inspizierte Seite entladen wird, ist die Verwendung des Ereignisses chrome.devtools.network.onNavigated (nur auf der Erweiterungsseite von devtools verfügbar).

+0

OK, danke für die Führung, hier ist eine genauere Erklärung, was ich bauen möchte, vielleicht können Sie mir mehr auf die richtigen API-Methoden verweisen, weil das Messaging zwischen Hintergrund, Seiten und Devtools-Skripten knifflig sein kann . Ich möchte einige Statistiken basierend auf einigen globalen Variablen von Seiten anzeigen, die ein bestimmtes JS-Framework verwenden. Also müsste ich auf die Runtime-JS-Variablen der aktuell geöffneten Seite innerhalb meiner Devtools-Seite zugreifen. Ist das möglich? Danke – treznik

+1

Ja, das ist möglich. Ich schlage vor, einen Knopf hinzuzufügen, damit der Benutzer Ihren Code manuell auslösen kann (der die globalen Variablen überprüft). Die APIs, die ich verlinkt habe, reichen aus, um den Anfang zu machen. Lass es mich wissen, wenn du nicht weiterkommst. –

+0

OK, ich habe es geschafft, chrome.webNavigation.onCompleted-Handler über das Hintergrundskript an unabhängige Devtools-Panels zu binden. So weit, so gut, aber wie komme ich von den grundlegenden "Details" -Parametern von https://developer.chrome.com/extensions/webNavigation.html#event-onCompleted, um auf die globalen Variablen dieser Registerkarte zuzugreifen? Danke – treznik

4

Ich hatte die gleiche Herausforderung, und das war das einzige Ergebnis, das ich in Google fand, also wollte ich mit der Lösung antworten, die ich fand. Der Schlüssel liegt nicht in chrome.devtools.inspectedWindow, sondern in chrome.tabs.onUpdated. In der Tat habe ich chrome.tabs.* gefunden, um im Allgemeinen viel nützlicher zu sein. Hier ist der Code, den ich verwende, um Statusänderungen von meiner Erweiterung zu sehen;

chrome.tabs.onUpdated.addListener(function (tabId, changes, tabObject) { 
    console.log("Status of", tabId, "is", changes.status); 
    if (changes.status == "complete") { 
    console.log("Tab Load Complete"); 
    } 
}); 

könnten Sie auch die chrome.tabs.* API die Statusänderung auf dem aktuellen Registerkarte passiert ist oder nicht zu prüfen, ob verwenden.

+1

Sie können den Code chrome.tabs nicht auf der Devtools-Seite verwenden, wo das OP nachfragt. Ich werde Sie nicht abmelden, da es scheint, dass einige Leute Ihre Lösung offensichtlich nützlich fanden, aber ich bezweifle, dass sie versuchten, ein Devtools-Panel zu machen. – WORMSS

Verwandte Themen