Управление движком рендеринга IE для System.Windows.Forms.WebBrowser? - PullRequest
1 голос
/ 10 сентября 2011

При использовании элемента управления System.Windows.Forms.WebBrowser существует ли способ контролировать, какую версию движка рендеринга IE он будет использовать?

1 Ответ

2 голосов
/ 10 сентября 2011

Я полагаю, что IE делает это, манипулируя строкой запроса User-Agent.

compatible; MSIE 7.0;
compatible; MSIE 8.0;
compatible; MSIE 9.0;

Поэтому, чтобы использовать различные механизмы рендеринга с WebBrowser, вам нужно сделать что-то подобное.К сожалению, получить доступ к User-Agent в WebBrowser нелегко .Вы можете сделать это, если вы расширяете фактический компонент Com, а не используете элемент управления .Net.

public class ExtendedWebBrowser : WebBrowser
{
    ...

    void BeforeNavigate(object pDisp, ref object url, ref object flags,
                       ref object targetFrameName, ref object postData, 
                       ref object headers, ref bool cancel)
    {
         if (!headers.Contains("X-RequestFlag")
         {
             headers += "X-RequestFlag: true\r\n";

             // append user-agent header here
             headers["User-Agent"] = ...;

             // cancel current request
             cancel = true;

             // re-request with amended details
             Navigate((string)url, (string)targetFrameName, (byte[])postData, 
                      (string)headers);
         }
         else
         {
             base.BeforeNavigate(...);
         }
    }
}
...