【问题标题】:Handling events fired by Property of ActiveX Control in HTML/Javascript在 HTML/Javascript 中处理由 ActiveX 控件的属性触发的事件
【发布时间】:2010-11-10 21:39:54
【问题描述】:

以下 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 的事件呢?

【问题讨论】:

    标签: javascript html events event-handling activex


    【解决方案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= 允许比:: 语法更晚的绑定?
    【解决方案2】:

    我发现在允许 javascript 兼容的事件实现的子对象上执行事件的最简单方法是自己实现 attachEvent 和 detachEvent;只需保存传入函数的 IDispatch*,然后遍历它们并在每个函数上调用 DISPID=0 的 Invoke。

    对于 MainObject 本身,您可能必须使用连接点,其工作方式略有不同。

    FireBreath 为 IE 和 Firefox 抽象了所有这些,包括创建单独的 COM 对象。可能值得一看

    【讨论】:

      猜你喜欢
      • 2011-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多