本帖最后由 trickglom 于 2012-02-29 22:53:35 编辑

解决方案 »

  1.   


    <div id="div1" onclick="external.DoSomething0()" style="padding:20px;">
        <span>诸多干扰元素<span>诸多干扰元素<span>诸多干扰元素<span>诸多干扰元素...</span>...</span>...</span>...</span>
        <div id="div2" onclick="external.DoSomething1()" style="padding:20px;">
            <span>诸多干扰元素<span>诸多干扰元素<span>诸多干扰元素<span>诸多干扰元素...</span>...</span>...</span>...</span>
            <div id="div3" onclick="external.DoSomething2()" style="padding:20px;">
             中间可能有多层嵌套,如果没有阻止冒泡,
              点击内层的元素会触发外层元素的click事件,
             通过event的srcElement可以得知点击了哪个元素,
              但如何得知是哪个这个事件是哪个元素的?
              </div>
        </div>
    </div>
    再解释下,为DIV1,DIV2,DIV3写了一个专用事件函数class DivClick: IDispatch {};
    然后使用IHTMLElement.put_click指定这些DIV的onclick事件。
    那么class DivClick如何侦知是触发的是哪个DIV的onclick事件先说说我的思路。在这里因为干扰元素的存在,event的srcElement不能凑效。如果是用javascript倒好办,传递一个this参数就能解决。问题是,实在不知道这个this参数用MFC+webbrowser怎么获取
      

  2.   

    IHTMLElement可以得到id,那你可以在 DivClick保存这个id的
      

  3.   

    id不能确定,唯一能确定是className和tagName。我想得到的只有用阻止冒泡,从srcElement开始层层判断父元素是否拥有同类事件,如果有,则fireEvent。
    这样的话,就要将所有可用之于onclick的IDispatch派生类都写上这样的判断,也蛮蛋疼的
      

  4.   

    枚举element,然后getAttribute获取onclick属性内容试一试
      

  5.   

    如果是可以onclick的element,可以考虑execScript送入一段js模拟element的click事件
    也可以使用fireEvent
      

  6.   

    简化一下我的问题:
    如<div onclick="func(this)">test html</div>上文的this用MFC+webbrowser+ATL+IDispatch如何实现?有人知道javascript的在这方面的实现原理么?
      

  7.   

    思路有一些问题,实现js中的this干吗呢,this是指的当前对象,在div中当然指的就是该div。要想知道点击了哪一个div,在DoSomething0、DoSomething1、DoSomething2中调用调用dispatch接口传递给mfc不就知道点击的哪一个div了。
    难道网页不是你自己的?那也可以,put_innnerhtml然后操作。或者插入js操作,同样在js中调用自己定义的dispatch接口通知mfc即可。