Ich habe meine Recherchen gemacht und habe eine Weile damit zu kämpfen gehabt, aber ich brauche deine Hilfe.
Ich erstelle eine Chrome DevTools-Erweiterung. Es sollte das aktuell ausgewählte Element aus dem Bereich "Elemente" als Referenz an ein JS-Objekt übergeben, das in einem Inhaltsskript definiert wurde.
Es ist wichtig, dass ich die Referenz an das ausgewählte Element weitergebe oder eine andere Möglichkeit, das Element aus dem Inhaltsskript zu identifizieren.
Ich verstehe den Workflow mit "isolierten Welten" in Chrome DevTools. Ich verstehe auch Messaging zwischen Erweiterungsseiten, Hintergrundseiten und Inhaltsskripten. Dies geschieht nur mit JSON-Primitiven, daher wird kein JS-Bereich übergeben.
Wie kann ich das Element, das im Elementfenster von devtools ausgewählt wurde, an das Inhaltsskript weitergeben, das auf der überprüften Seite existiert?
Bearbeiten
Folgendes weiß ich bisher:
Eine Referenz auf das ausgewählte Element erhalten:
%Vor%
-
Dieser Funktionsausdruck wird im Kontext der inspizierten Seite ausgeführt, nicht im Kontext der Erweiterung "devtools" und nicht im Kontext der "isolierten Welt" des Inhaltsskripts. Ich glaube nicht, dass es möglich ist, einen Verweis auf einen anderen Kontext unter Verwendung von Schließungen zu geben.
-
Der Verweis auf das ausgewählte DOM-Element chrome.devtools
kann nicht zurückgegeben werden, da es aufgrund von Zirkelverweisen nicht zu JSON serialisiert werden kann.
-
Der Namensraum chrome.devtools.inspectedWindow
ist außerhalb der Erweiterungsseite von devtools nicht verfügbar. Die %code% -Referenz kann nicht außerhalb des ausgewerteten Ausdrucks in %code%
verwendet werden
Workaround
Als Workaround wählte ich das gemeinsam genutzte DOM, um das ausgewählte Element mit einem Datenattribut zu markieren und es im Kontext des Inhaltsskripts erneut auszuwählen. Messaging wird verwendet, um den Datenattributmarker herumzuführen.
Hier ist eine vereinfachte Version des Codes:
Auf der devtools-Erweiterung Seite:
%Vor%
Im Inhaltsskript :
%Vor%
Es ist keine saubere Lösung, aber ich kann es für meine Bedürfnisse verwenden.
Gibt es einen einfacheren Weg, um das gleiche Ergebnis zu erzielen? Identifizieren Sie aus einem Inhaltsskript das Element, das in den Devtools-Elementen ausgewählt wurde?