BHO如何替换javascript事件处理结果?

时间:2013-02-07 04:02:42

标签: c# javascript event-handling bho

因为拖动一个超链接的图像,无法获取“FileDrop”或“DIB”数据,所以我想用C#写一个BHO来增强拖放图像。

我在文档上注入了dragstart事件,它工作正常,但是:

如果javascript设置了这样的ondragstart事件处理程序:

<script>
ondragstart = function(){
  var obj = event.srcElement;
  if(obj.tagName == "A"){
    event.dataTransfer.setData("text", "TTTTTTTTTTTTTTT");
  }
  window.document.title = event.srcElement.tagName;
}
document.attachEvent("ondragstart", ondragstart);
</script>

AND BHO ondragstart事件处理程序:

...
if (!string.IsNullOrWhiteSpace(src))
{
    try
    {
        var info = WinInetAPI.GetUrlCacheEntryInfo(src);
        src = info.lpszLocalFileName;
    }
    catch
    {

    }
    eventObj.dataTransfer.setData("Text", src);
}
...

最终结果是:TTTTTTTTTTTTTTT。

在调试器中,我可以看到在javascript事件处理程序之前调用BHO ondragstart事件处理程序。

那么,有没有在javascript事件处理程序之后调用BHO事件处理程序?

对不起我的英语。 请帮忙。谢谢。

1 个答案:

答案 0 :(得分:0)

我找到了一个解决方案: 在BHO事件处理程序中,添加以下代码:

(eventObj as IHTMLEventObj).cancelBubble = true;

这个问题让我整天都感到厌烦