2013-07-08 47 views
2

問題:WebBrowser的'搶斷'快捷鍵

我有一個WebBrowser並已公開其ActiveX方法。在我的WebBrowser所在的表單中,我有一個帶有快捷鍵的MainMenuStrip。只有在我的表單上輸入文本框時,快捷方式才能正常工作。例如,當我按CTRL + N,我的窗體的一個快捷方式 - 而不是一個新的窗體開放,Web瀏覽器當前打開的頁面在IE中打開。

我已經試過:

  1. 我曾嘗試使用計時器沒有工作(這不會是一個可行的選擇,無論如何,因爲它不是非常微妙的,聚焦的形式每隔100ms程序必須使用SendKeys等小心導航WebBrowser)。

  2. 代碼web瀏覽器:

    this.webBrowser1.WebBrowserShortcutsEnabled = false; 
    this.webBrowser1.AllowWebBrowserDrop = false; 
    this.webBrowser1.IsWebBrowserContextMenuEnabled = false; 
    
  3. 從web瀏覽器和壓倒一切的ProcessCmdKey繼承:

    protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
    { 
        if (keyData == (Keys.Control | Keys.N)) 
        { 
         newToolStripMenuItem.PerformClick(); 
         return true; // or false 
        } 
    } 
    

什麼,我想實現:

  1. 那WebB rowser的快捷方式被禁用(我讀過的地方,ActiveX防止這...爲什麼?)。

  2. 我想要的是,除非當前正在WebBrowser中鍵入/導航,否則表單的快捷鍵將起作用。重點應該從web瀏覽器採取徘徊無論有控制之外的點擊,而不僅僅是當其他文本框是焦點(例如,當有形式的空白點擊。

+0

你可以通過揭示其ActiveX方法來闡明你的意思嗎? –

+0

@EvanHarper,我會給它一個鏡頭: 私人SHDocVw。WebBrowser_V1 Web_V1; Web_V1 =(SHDocVw.WebBrowser_V1)webBrowser1.ActiveXInstance; 這就是代碼至少。不知道我完全理解它! –

+0

是否代碼實際上確實是會與Web_V1任何引用它的concoted?這是重要的一部分。 –

回答

0

調查了很多之後,我們才知道它是瀏覽器的兼容性問題。

我們已經增加了元標記的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> 

這個問題有三種不同的解決方案。

添加元標記以使網站瀏覽器兼容。

重寫「PreocessCmdKey」方法並處理快捷方式。

通過在FEATURE_BROWSER_EMULATION下添加密鑰來模擬瀏覽器。

如果您不想在HTML代碼中設置元標記,則可以在導航URL之前將meta標記指定給webbrowser控件的Document文本屬性。以下是示例。

//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");