2009-10-07 37 views
-1

我有一个简单的WPF应用程序和一个webbrowser控件。当我指导控件加载一个页面时,我想让控件告诉服务器,它试图从它是一个移动设备加载页面,因此加载较小版本的页面。我知道很多网站只是在地址前添加移动设备,所以google.com的移动页面只是mobile.google.com,但我想知道是否有一种方法可以让Web服务器自动将我的webbrowser控件指向该网站的移动版本?我觉得应该有一个非常简单的方法来做到这一点,但我无法弄清楚:)。如何让c#wpf webbrowser控件加载移动版本的网站

在此先感谢!

回答

0

这通常由网站使用User Agent控制,这不是您可以使用标准WebBrowser控件更改的东西。有一个替代WPF网页浏览器控件,基于Chromium,您可以从CodePlex下载。它可能不支持用户代理欺骗,但它是开源的,所以你可以在代码中手动将它改为iPhone,Windows Mobile等。

+0

非常明确的答案对飞查看移动网站。我想说你需要将用户代理设置为基于电话的UA,但是我不知道你无法轻易更改UA。 –

+0

感谢您的回复!我会尝试Chromium。 – Evan

10

实际上,WebBrowser确实支持通过头中的标头更改用户代理导航方法:

this.yourWebBrowserControl.Navigate(new Uri("http://www.yoursite.com"), string.Empty, null, string.Format("User-Agent: {0}", "Your user agent string here")); 
+0

我认为你可能是堆栈溢出的唯一一个曾经发布过这个问题的正确答案...... –

0

Boydski的解决方案对我来说并不合适。针对这种情况 最好的解决办法:

Changing the user agent of the WebBrowser control

然而好事多磨的“navigator.userAgent的”未设置有头 - 解决方案。 在这种情况下,您必须使用UrlMkSetSessionOptionMSDN

// import .. use a internal static class like "Native" ;) 
[DllImport("urlmon.dll", CharSet = CharSet.Ansi)] 
internal static extern int UrlMkSetSessionOption(int dwOption, string pBuffer, int dwBufferLength, int dwReserved); 

// usage 
string userAgent = "Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_3 like Mac OS X; en-us)"; 

UrlMkSetSessionOption(0x10000002, null, 0, 0); 

UrlMkSetSessionOption(0x10000001, userAgent, userAgent.Length, 0); 

正确的用户代理字符串,你可以找到here

玩得开心!

1

我知道这是老了,但是这是一个容易的事:

首先,你需要的用户代理字符串,它需要的格式字符串。这是我如何在 以下做到的wbMobile是一个网页浏览器控件。这个例子将带你到移动冰网站

wbMobile.Navigate(new Uri("http://m.bing.com/", UriKind.RelativeOrAbsolute), string.Empty, null, string.Format("User-Agent: {0}", "Opera/9.80 (J2ME/MIDP; Opera Mini/9 (Compatible; MSIE:9.0; iPhone; BlackBerry9700; AppleWebKit/24.746; U; en) Presto/2.5.25 Version/10.54")); 

这将导航到使用移动用户代理字符串的网页,并允许您在WebBrowser控件