2009-07-15 4 views
4

Das folgende HTML-Objekt stellt ein ActiveX-Steuerelement, das eine Eigenschaft mit dem Namen SubSystemA hat:Verarbeiten von Ereignissen von Eigentum von ActiveX-Steuerelement in HTML/Javascript gefeuert

<object id="MainObject" 
    CLASSID="CLSID:2C327457-D12F-4FC4-BFC2-D7C029003D07" 
    width="0px" height="0px" 
    > 
    <embed name="MainObject"></embed> 
</object> 

SubSystemA ist ein COM-Objekt eine Schnittstelle mit Methoden, Eigenschaften Implementierung, und Ereignisse. Die Methoden und Eigenschaften von SubSystemA sind leicht aus JavaScript aufrufbar, aber da SubSystemA eine Eigenschaft von MainObject ist, bin ich mir nicht sicher, wie ich einen Ereignishandler an die Ereignisse von SubSystemA anhefte.

Ich kenne zwei Möglichkeiten, Ereignisse von MainObject gefeuert zu handhaben:

<script type="text/javascript"> 
    function MainObject::SomeMainEvent(arg1, arg2) 
    { 
     // Event handling logic 
    } 
</script> 

und

<script type="text/javascript" for="MainObject" event="SomeMainEvent(arg1, arg2)"> 
    // Event handling logic 
</script> 

Aber wie würde man behandelt ein Ereignis für MainObject.SubSystemA?

Antwort

1

fand ich, dass die folgenden Werke:

<object id="MainObject" 
    CLASSID="CLSID:2C327457-D12F-4FC4-BFC2-D7C029003D07" 
    width="0px" height="0px" 
    > 
    <embed name="MainObject"></embed> 
</object> 

<script type="text/javascript"> 
    function MainObject.SubSystemA::SomeSubSystemEvent(arg1) 
    { 
     // Event handling logic 
    } 
</script> 

und derzeit nach einer Möglichkeit suchen, die < Skript für = „...“ event = „...“ > Syntax, anzupassen, da es scheint Späteres Binden zulassen, wo die Arbeitssyntax nicht funktioniert.

+0

Ein bisschen spät, aber könnten Sie näher darauf eingehen, wie '

1

Der einfachste Weg, Ereignisse in einem Unterobjekt zu finden, das Javascript-kompatible Implementierung von Ereignissen ermöglicht, ist es, attachEvent und detachEvent selbst zu implementieren; Speichern Sie einfach den IDispatch * der Funktion, die übergeben wird, und durchlaufen Sie sie anschließend und rufen Sie Invoke mit DISPID = 0 auf.

Für MainObject selbst müssen Sie wahrscheinlich Verbindungspunkte verwenden, die ein bisschen anders funktionieren.

FireBreath abstrahiert all dies für IE und Firefox, einschließlich der Erstellung von separaten COM-Objekten. Vielleicht ein Blick wert