Ich erstelle eine Chrome-Erweiterung, die mit draw.io interagiert. Draw.io erstellt eine Instanz von EditorUI, die alle Informationen über das aktuell geöffnete Diagramm enthält (einschließlich eines SVG-Bildes des Diagramms). Ist es möglich, mit JavaScript auf diesen Kontext zuzugreifen? Die Fenstervariablen (auf die durch Codeeinfügung zugegriffen werden kann) enthalten nur eine Funktion zum Erstellen einer Instanz von EditorUI, jedoch nicht die Instanz selbst. Ich kann den staatlichen/lokalen Geltungsbereich nicht erreichen.Draw.io: Instanz von EditorUI abrufen
Antwort
Hier ist, wie ich es gelöst habe: Das Einfügen einer Funktion war der richtige Ansatz. Zuerst hatte ich gehofft, einfach Draw.io-Funktionen wie getCurrentFile();
aufzurufen, um die gewünschten Informationen zu erhalten. Während es möglich ist, sie anzurufen, bekommst du nichts als null
raus. Ich beschloss daher, die Funktion zu überschreiben, den ursprünglichen Inhalt beizubehalten und das, was ich brauche, an einen benutzerdefinierten Ereignis-Listener zu senden.
var svg = null;
/**
* Function to be inserted into Draw.io. Contains a function that overrides getCurrentFile(). Original functionality
* of getter function is kept, file data is saved to a variable.
*/
var hijackFileGetter = '(' + function() {
window.EditorUi.prototype.getCurrentFile = function() {
if(this.currentFile !== null) {
var svg = this.currentFile.data;
var event = document.createEvent("CustomEvent");
event.initCustomEvent("listenToChanges", true, true, svg);
document.dispatchEvent(event);
}
return this.currentFile;
};
} + ')();';
/**
* Injection of Javascript code into Draw.io
*/
var script = document.createElement('script');
script.textContent = hijackFileGetter;
(document.head||document.documentElement).appendChild(script);
script.remove();
/**
* EventListener for communication from our injected script to this content script
* Receives a new SVG every time changes are made
*/
document.addEventListener('listenToChanges', function (data) {
svg = data.detail;
});
/**
* Message passing from content script to popup (and the other way around)
*/
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
if(request.popup) {
chrome.runtime.sendMessage({svg: svg});
sendResponse({svgSearch: true});
}
});
App.main has a callback, die die ui-Instanz zurückgibt.
Ich bin ziemlich neu in Javascript und der minimierte Quellcode macht mich verrückt (gibt es nicht-minimierten Quellcode verfügbar?). Können Sie mir sagen, wie genau ich diesen Rückruf verwenden würde? – Felix
https://github.com/jgraph/draw.io/tree/v6.3.4/war/js/diagramly – David
Danke, das sieht aus wie ich brauche. Ich verstehe es immer noch nicht ganz: Draw.io ruft App.main ohne Rückruf auf. Wenn ich es selbst anrufe, kann ich das nur in einem anderen Kontext tun. Wie bekomme ich meinen Rückruf in die Website? – Felix
- 1. Apache app (draw.io) automatisch zu https umgeleitet
- 2. Instanz einer laufenden Aktivität abrufen?
- 3. VB.NET: Klassenname einer Instanz abrufen
- 4. Get Instanz von Instanz-ID
- 5. Abrufen der Anzahl der Bytes von einer Instanz von NSMutableData
- 6. Instanz-ID der EC2-Instanz über Java abrufen
- 7. Eine EhCache-Instanz mit Spring ... intelligent abrufen
- 8. C# Eigenschaftswert abrufen, ohne Instanz zu erstellen?
- 9. Wie programmgesteuert öffentliche DNS einer Instanz abrufen?
- 10. Instanz des untergeordneten Objekts in iframe abrufen
- 11. Android: Instanz einer Fragmentaktivität von einer anderen Aktivität abrufen
- 12. Abrufen von Daten aus Firebase Datenbank: Unbekannter Selektor gesendet Instanz
- 13. Wie konnte ich die ActionBar-Instanz von AppCompatDialogFragment abrufen?
- 14. Eine Methode von einer Superklasse über eine Instanz abrufen
- 15. Abrufen des Namens der Klasse von einer Instanz
- 16. Abrufen öffentlicher DNS von EC2-Instanz mit BOTO3
- 17. Mit der Instanz verknüpfte Volume-Informationen abrufen
- 18. Laufzeit für eine AWS-Instanz abrufen
- 19. Wie ChartJS-Instanz nach der Initialisierung abrufen
- 20. Abrufen von NSManagedObjectContext von NSManagedObject
- 21. Vue: Abrufen der Router-Instanz in untergeordneten Komponenten
- 22. Abrufen des Hauptfensters einer App über eine NSRunningApplication-Instanz
- 23. Abrufen der Klasseninstanz von jquery
- 24. Kann aktuelle Visual Studio-Instanz nicht mit System.Diagnostics.Process.GetCurrentProcess() abrufen;
- 25. abrufen Design-Matrix aus DMatrix Instanz in xgboost
- 26. Instanz von einer anderen Instanz in Python
- 27. Abrufen aller Elemente aus einer Seite Instanz - Spring MVC
- 28. Problem beim Abrufen des Eigenschaftswerts einer Instanz einer OWL-Klasse
- 29. Instanziieren IDataAdapter von Instanz IDbConnection
- 30. Abrufen einer ausgeblendeten Kopfzeile in einer sortierten handsontablen Instanz
Mögliches Duplikat [Insert-Code in den Seitenkontext einen Content-Skript] (http://stackoverflow.com/questions/9515704/insert-code-into-the-page-context-using-a- content-script) – Makyen