Untergeordnete Seiten
  • Keyboard Shortcuts und JWT im iframe
Zum Ende der Metadaten springen
Zum Anfang der Metadaten

In manchen Kundensituationen wird das jadice web toolkit mittels eines iframes in die umgebende Anwendung integriert. Sobald der Benutzer mit der Maus auf ein Element der umgebenden Anwendung clickt, teilt der Browser der umgebenden Anwendung den Fokus zu. Falls der Benutzer im Anschluss eine Funktion des JWT mittels eines Keyboardshortcuts steuern möchte, schlägt dies fehl, weil der Browser nur diejenige Anwendung über die Tastatureingabe benachrichtigt, die den Fokus besitzt. Um die Shortcuts auch in diesem Fall nutzen zu können, müssen alle Keyboard-Events von der umgebenden Anwendung an den iframe propagiert werden.

In manchen Kundensituation wird außerdem der iframe, in dem das JWT dargestellt wird, von einem anderen Host geladen als die umgebende Anwendung. In diesem Fall erschwert sich die Kommunikation zwischen beiden Anwendungen aufgrund der Same-Origin-Policy.

Eventweiterleitung Same Origin

Dieser Abschnitt beschreibt, wie Keyboard Shortcuts verwendet werden können, wenn der das JWT einbettende iframe vom selben Origin geladen wird, wie die umgebende Anwendung. Hierzu wird in der umgebenden Anwendung ein Event-Listener registriert, der von jedem Keyboard-Event eine Kopie erstellt und diese an das Body-Element des iframes schickt. Die Kopie des Events wird benötigt, da Events nicht zwei mal dispatched werden können. Würde man also im unteren Beispiel iframe.body.dispatchEvent(event); eingeben, so würde der Browser einen Fehler werfen, und das Event würde nicht weitergeschickt werden.

Eventweiterleitung Same Origin

Zu beachten ist, dass der ActionManager bis einschließlich JWT 5.5.5.0 dafür über ActionManager.initialize(RootPanel.get()); initialisiert werden muss. Da das RootPanel in GWT dem body-Element entspricht, führt dies dazu, dass der ActionManager über alle KeyboardEvents, die an das body-Element geschickt werden, benachrichtigt wird. Ab JWT 5.6.0.0 wird der ActionManager implizit am RootPanel initialisiert, sodass der Aufruf wegfallen kann.

Eventweiterleitung Cross Origin

Dieser Abschnitt beschreibt, wie Keyboard Shortcuts verwendet werden können, wenn der das JWT einbettende iframe von einem anderen Origin geladen wird, als die umgebende Anwendung. Eine Möglichkeit, den Eventversand zwischen beiden Anwendungen zu implementieren, stellt die Methode Window.postMessage dar. Hierzu wird in der umgebenden Anwendung ein EventListener registriert, der bei Eingabe eines beliebigen KeyDownEvents benachrichtigt wird und dann via Window.postMessage eine Nachricht an den eingebetteten iframe schickt. Innerhalb des iframes wird ebenfalls ein EventListener registriert, der immer dann benachrichtigt wird, wenn eine Nachricht via postMessage am iframe ankommt. In diesem EventListener wird dann das zugehörige KeyboardEvent an das body Element im iframe geschickt. Im Anschluss informiert der Browser dann den ActionManager des JWT über das Event, sodass dieser die zugehörige Funktion im Viewer auslösen kann.

Das folgende Skript enthält die Logik für die umgebende Anwendung.

Eventweiterleitung Cross Origin - umgebende Anwendung

 

Das folgende Skript enthält die Logik für die index.html des im iframe eingebetteten JWT.

Eventweiterleitung Cross Origin - iframe

Zu beachten ist, dass der ActionManager bis einschließlich JWT 5.5.5.0 dafür über ActionManager.initialize(RootPanel.get()); initialisiert werden muss. Da das RootPanel in GWT dem body-Element entspricht, führt dies dazu, dass der ActionManager über alle KeyboardEvents, die an das body-Element geschickt werden, benachrichtigt wird. Ab JWT 5.6.0.0 wird der ActionManager implizit am RootPanel initialisiert, sodass der Aufruf wegfallen kann.

5 von 78 Ergebnissen werden angezeigt