繁体   English   中英

如何禁用WebBrowser鼠标中键单击自动滚动?

[英]How can I disable WebBrowser middle mouse click autoscrolling?

我正在尝试设置一个WebBrowser,在其中可以通过鼠标中键单击链接来打开新选项卡。

首先尝试对WebBrowser和WebBrowser.Document都单击Click / MouseDown事件,该事件仅在左键单击时触发。 然后,我尝试在遇到问题的WebBrowser上覆盖WndProc过程。 我可以用这种方式让鼠标中键按下,然后将点击发送给链接,但它也开始自动滚动。 还尝试查看是否可以覆盖WebBrowser.Document上的WndProc,但这是一个密封的类。

我尝试寻找WebBrowser组件的替代方案,因为我对使用它一开始并不满意。 替换它的选项似乎是打包webkit / gecko或在html呈现组件之上构建我自己的浏览器。 我不太喜欢webkit / gecko,因为它增加了程序的大小。 我没有找到可以满足我需求的html渲染组件,因此运气不佳。

我知道这太老了,但是最近我很难解决这个问题,并以为我会分享。 此解决方案有两个不同的部分。 第一个非常简单-只需为浏览器控件的MouseDown事件设置一个事件处理程序即可:

browser.Document.MouseDown += new HtmlEventHandler(Browser_MouseDown);

void Browser_MouseDown(object sender, HtmlElementEventArgs e)
{ 
     if (e.MouseButtonsPressed == System.Windows.Forms.MouseButtons.Middle)
     {
         e.ReturnValue = false;

         // Your custom code
     }
}

我发现上述解决方案阻止了大多数网页上的正常中键点击操作,但是也有一些JavaScript繁重的网站无法使用该解决方案。 对于这些,我找到了另一种解决方案,涉及将javascript注入文档中,这将防止单击鼠标中键:

HtmlElement head = browser.Document.GetElementsByTagName("head")[0];
HtmlElement mscript = browser.Document.CreateElement("script");
IHTMLScriptElement element = (IHTMLScriptElement)mscript.DomElement;
element.text = "function handleMouseEvent(e) { "
               + "var evt = (e==null ? event:e); "
               + "if ( e.which == 2 ) e.preventDefault(); "
               + "return true; } "
               + "document.onmousedown = handleMouseEvent; "
               + "document.onmouseup   = handleMouseEvent; "
               + "document.onclick     = handleMouseEvent; ";
head.AppendChild(mscript);

我将其放在webbrowser控件的DocumentCompleted事件上。 出现上述解决方案是为了防止在所有站点上执行默认的单击鼠标中键的操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM