Reaktion auf Events von Komponenten
Gordian Schmidt
- javascript
0 CirTap
Um Zugriff auf ein Bussystem zu haben, lade ich auf einer Html-Seite eine externe Komponente (mit new ActiveXObject), die mehrere Events erzeugen kann.
Wie kann ich mit JavaScript einen event handler erzeugen, der von einem dieser Ereignisse gefeuert wird? Ich frage mich langsam, ob das überhaupt geht, denn in der msdn library kann ich sowas nicht finden...
Kennt sich da jemand aus?
Hallo Gorian,
ActiveX = IE, demnach solltest Du der Einfachheit halber in VBScript programmieren, zumindest die Event-Handler lassen sich so einfach implementieren.
Der IE ist auch in der Lage Funktionen die in VBS und JS zu mischen, sprich man kann sie gegenseitig aufrufen!
Beispiel:
<OBJECT id="meinTeil" ...>
Der Doku des ActiveX-Objektes kannst du ja die Parameterliste der Events entnehmen, falls erforderlich.
Der IE übernimmt *automatisch* die Zuweisung zwischen den Event-handler-Funktionen und den Objekten, sofern sie in VBS programmiert sind!!
Eine Deklaration des Eventhandler in der Art wie bei JS ist also nicht unbedingt erforderlich.
Beispiel: Eventname = fileLoaded
<script language="VBScript">
Function meinTeil_fileLoaded()
' ^^^^^^^^
' "meinTeil" ist die ID des (HTML-)Objektes
' machen was erforderlich ist
...
' z.B. JS-Funktion aufrufen (!)
Call assimilate("Ich bin VBS")
End Function
Function meinTeil_anderesEvent()
...
End Function
</script>
<script language="javascript">
function assimilate(msg) {
alert(msg);
}
</script>
Die Syntax für einen Event-Handler in VBS lautet also:
Function objektID_eventname()
End Function
Die "offiziellen" Vorgehensweisen in JavaScript wären:
1.)
<script FOR="meinTeil" EVENT="fileloaded" LANGUAGE="JavaScript">
/* hier auf Kleinschreibung achten! */
alert("Datei wurde geladen");
</script>
oder
2.) document.all.meinTeil.fileloaded="eventHandler()";
Der Aufruf von VBS-Funktionen innerhalb eines JavaScript Blockes ist natürlich ebenso möglich. Im Script-Tag muß aber unbedingt die verwendete LANGUAGE="sprache" angegeben werden, da IE sonst von JavaScript ausgeht.
Und ein nachvollziehbarer "Beweis" (copy'n'paste):
<script language="vbscript">
Function window_onload()
msgbox "Ich habe fertig!", vbInformation,_
"Tach auch"
End Function
</script>
entspricht
<body ... onload="funktion();">
Das steht übrigenz *alles* im MSDN ;-)
http://msdn.microsoft.com/workshop/author/om/event_model.asp
CirTap