Winform WebBrowser被识别为移动设备

3

我正在尝试通过WinForms中的Web浏览器控件打开网站。虽然它能够打开任何网站,但只能打开移动版本。我的Web浏览器被识别为移动设备。

1个回答

3
你可以使用 Navigate 方法并将适当的 User-Agent 字符串作为 additionalHeaders 参数传递,以导航到页面。
这个技巧对于那些基于用户代理字符串在服务器端检测移动模式的站点非常有用。对于一些没有检测移动模式,只有基于浏览器大小的客户端响应式设计的站点,你可以调整浏览器控件的大小以显示移动视图。 示例 以下是 Windows Phone 10 上 Edge 的用户代理字符串的 示例
你可能需要使用不同的用户代理
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.stackoverflow.com", null, null, additionalHeaders);

作为结果,您会在移动模式下看到stackoverflow网站: enter image description here 请注意-更好的选择是设置所有后续请求的用户代理
作为一种选项,为了设置所有后续请求的用户代理,您可以使用以下代码:
[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");
}

这会让我能够查看非移动版本的网站吗? - Infinite
1
您可以将null设置为“additionalHeaders”参数,以查看非移动版本。 - Reza Aghaei
1
我删除了关注脚本错误的部分回答。如果您需要该部分内容,可以在修订版本中查看。看起来这篇文章回答了您的问题。如果您对答案有任何疑问或发现答案有帮助,请告诉我 :) - Reza Aghaei
1
@Rafa 我也更新了这篇帖子,提供了另一种解决方案。 - Reza Aghaei
1
@Rafa 我更喜欢这篇帖子的解决方案。 - Reza Aghaei
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接