2013-07-08 2 views
2

ПРОБЛЕМА:Быстрые клавиши для веб-браузеров

У меня есть WebBrowser и выставляются его методы ActiveX. В моей форме, в которой размещен WebBrowser, у меня есть MainMenuStrip с ярлыками. Только когда я печатаю текстовое поле в своей форме, эти ярлыки работают правильно. Например, когда я нажимаю CTRL + N, ярлык моей формы - вместо открытия новой формы, открывается страница, в которой находится веб-браузер в IE.

что я пытался:

  1. Я попытался фокусирования форме каждые 100 мс с помощью таймера, который не работал (это не будет жизнеспособным вариантом в любом случае, поскольку это не очень тонкий и программа должна тщательно перемещаться по WebBrowser с помощью SendKeys и т. д.).

  2. Код для WebBrowser:

    this.webBrowser1.WebBrowserShortcutsEnabled = false; 
    this.webBrowser1.AllowWebBrowserDrop = false; 
    this.webBrowser1.IsWebBrowserContextMenuEnabled = false; 
    
  3. Наследование WebBrowser и наиважнейшей ProcessCmdKey:

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

Я пытаюсь ДОСТИЖЕНИЯ:

  1. Это WebB Ярлыки ярлыка отключены (я где-то читал, что ActiveX предотвращает это ... почему?).

  2. Что бы я хотел, так это то, что, если в настоящее время не вводится/перемещается в WebBrowser, работают ярлыки формы. Основное внимание должно быть взято из WebBrowser везде, где есть щелчок вне контроля, а не только тогда, когда другие текстовые поля находятся в фокусе (например, когда есть щелчок в заготовке формы.

+0

Можете ли вы пояснить, что вы имеете в виду, подвергая его методам ActiveX? –

+0

@EvanHarper, я сделаю снимок: частный SHDocVw.WebBrowser_V1 Web_V1; Web_V1 = (SHDocVw.WebBrowser_V1) webBrowser1.ActiveXInstance; Вот как минимум код. Не уверен, что я полностью это понимаю! –

+0

Действительно ли код на самом деле * делает * что-либо с этой ссылкой Web_V1? Это важная часть. –

ответ

0

Попробуйте унаследовать от управления WebBrowser и переопределения Control.IsInputKey. Смотрите, если Ctrl + N прибывает туда.

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-адреса. Ниже приведен образец.

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