Winform Webbrowser 被识别为移动设备

Winform Webbrowser being recognized as a mobile device

我正在尝试通过 winforms 中的网络浏览器控件打开网站。尽管无论它打开什么网站,它都是通过移动版本打开的。我的网络浏览器被识别为移动设备。

您可以使用 Navigate 方法导航到该页面并传递合适的 User-Agent 字符串作为 additionalHeaders 参数。

该技巧对于根据用户代理字符串在服务器端检测移动模式的站点很有用。对于某些不检测移动模式且仅具有基于浏览器大小的客户端响应设计的站点,您可以将浏览器控件调整到合适的大小以显示移动视图。

例子

这是 Windows Phone 10.
上 Edge 的 example 用户代理字符串 您可能需要使用 different user agent.

var additionalHeaders = "User-Agent:Mozilla/5.0 (Windows Phone 10.0; Android 6.0.1; " +
    "Microsoft; Lumia 950 XL Dual SIM) AppleWebKit/537.36 (KHTML, like Gecko) " +
    "Chrome/52.0.2743.116 Mobile Safari/537.36 Edge/15.15063\r\n";

this.webBrowser1.Navigate("http://www.whosebug.com", null, null, additionalHeaders);

因此您在移动模式下看到 Whosebug 站点:

注意 - 作为更好的选择,为所有后续请求设置用户代理

作为一个选项,您可以使用以下代码为所有后续请求设置用户代理:

[DllImport("urlmon.dll", CharSet = CharSet.Ansi)]
private static extern int UrlMkSetSessionOption(int dwOption, string pBuffer,
    int dwBufferLength, int dwReserved);
const int URLMON_OPTION_USERAGENT = 0x10000001;

string additionalHeaders = "User-Agent:Mozilla/5.0 (Windows Phone 10.0; Android 6.0.1; " +
    "Microsoft; Lumia 950 XL Dual SIM) AppleWebKit/537.36 (KHTML, like Gecko) " +
    "Chrome/52.0.2743.116 Mobile Safari/537.36 Edge/15.15063\r\n";
private void Form1_Load(object sender, EventArgs e)
{
    UrlMkSetSessionOption(URLMON_OPTION_USERAGENT, 
        additionalHeaders, additionalHeaders.Length, 0);
    webBrowser1.Navigate("http://google.com");
}