网络浏览器';抢断';快捷键
本文关键字:快捷键 抢断 浏览器 网络 | 更新日期: 2023-09-27 18:21:30
问题:
我有一个WebBrowser,并且已经公开了它的ActiveX方法。在Web浏览器所在的窗体中,我有一个带有快捷键的MainMenuStrip。只有当我在表单上的文本框中键入时,快捷方式才能正常工作。例如,当我按下窗体的快捷键CTRL+N时,WebBrowser当前所在的页面将在IE中打开,而不是打开新的窗体。
我尝试过的:
-
我尝试过使用计时器每100毫秒聚焦一次表单,但没有成功(无论如何,这不是一个可行的选择,因为它不是很微妙,程序必须使用SendKeys等小心地浏览WebBrowser)。
-
WebBrowser代码:
this.webBrowser1.WebBrowserShortcutsEnabled = false; this.webBrowser1.AllowWebBrowserDrop = false; this.webBrowser1.IsWebBrowserContextMenuEnabled = false;
-
从WebBrowser继承并覆盖ProcessCmdKey:
protected override bool ProcessCmdKey(ref Message msg, Keys keyData) { if (keyData == (Keys.Control | Keys.N)) { newToolStripMenuItem.PerformClick(); return true; // or false } }
我正在努力实现的目标:
-
WebBrowser的快捷方式被禁用(我在某个地方读到ActiveX阻止了这一点…为什么?)。
-
我希望的是,除非当前正在WebBrowser中键入/导航,否则表单的快捷方式可以工作。无论何时在控件外点击,都应从Web浏览器获取焦点,而不仅仅是在其他文本框处于焦点时(例如,在表单空白处点击。
尝试从WebBrowser控件继承并重写control.IsInputKey。查看Ctrl+N是否到达。
经过大量调查,我们发现这是浏览器兼容性问题。
我们已经在HTML页面中添加了元标记,然后快捷方式就可以正常工作了。下面是示例代码。
<html>
<body>
<Head>
<meta http-equiv="X-UA-Compatible" content="IE=IE8" />
</head>
<form>
First name:<br>
<input type="text" name="firstname">
<br>
Last name:<br>
<input type="text" name="lastname">
</form></body>
</html>
这个问题有三种不同的解决方案。
添加元标记以使网站浏览器兼容。
重写"PrecessCmdKey"方法并处理快捷方式。
通过在FEATURE_browser_EMULATION下添加密钥来模拟浏览器。
如果不想在html代码中设置元标记,可以在导航URL之前将元标记分配给Web浏览器控件的Document text属性。下面是示例。
//Setting compatible mode of IE.
this.m_oWebBrowser.DocumentText = @"<html>
<head><meta http-equiv=""X-UA-Compatible"" content=""IE=IE8"" /> </head>
<body></body>
</html>";
this.m_oWebBrowser.Navigate("www.google.com");