以下HTML对象表示具有名为SubSystemA的属性的ActiveX控件:
<object id="MainObject"
CLASSID="CLSID:2C327457-D12F-4FC4-BFC2-D7C029003D07"
width="0px" height="0px"
>
<embed name="MainObject"></embed>
</object>
SubSystemA是一个COM对象,它实现了一些方法,属性和事件的接口。 SubSystemA的方法和属性可以从Javascript轻松调用,但由于SubSystemA是MainObject的属性,我不知道如何将事件处理程序附加到SubSystemA的事件。
我知道有两种方法来处理MainObject触发的事件:
<script type="text/javascript">
function MainObject::SomeMainEvent(arg1, arg2)
{
// Event handling logic
}
</script>
和
<script type="text/javascript" for="MainObject" event="SomeMainEvent(arg1, arg2)">
// Event handling logic
</script>
但是如何处理MainObject.SubSystemA的事件?
答案 0 :(得分:1)
我发现以下工作:
<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>
我正在寻找一种方法来调整&lt; script for =“...”event =“...”&gt;语法,因为它似乎允许后面的绑定工作语法没有。
答案 1 :(得分:1)
我发现在允许javascript兼容实现事件的子对象上执行事件的最简单方法是自己实现attachEvent和detachEvent;只需保存传入的函数的IDispatch *,然后遍历它们并在每个函数上调用DISPID = 0的Invoke。
对于MainObject本身,您可能必须使用连接点,这有点不同。
FireBreath为IE和Firefox提取了所有这些内容,包括创建单独的COM对象。可能值得一看