1

因为拖动超链接中的图像,无法获取“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);
}
...

最后的结果是:TTTTTTTTTTTTTT。

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

那么,无论如何在 javascript 事件处理程序之后调用 BHO 事件处理程序?

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

4

1 回答 1

0

我找到了解决方案:在 BHO Event handler 中,添加以下代码:

(eventObj as IHTMLEventObj).cancelBubble = true;

这个问题困扰了我一整天

于 2013-02-07T08:04:16.633 回答