有没有一种通过C#请求iOS和Android WebView组件请求桌面站点的方法?
您需要针对每个平台进行操作。
安卓(Android)
在安卓(Android)中,您需要实现一个自定义渲染器。将以下内容添加到您的安卓代码中:
// this line directly ubleow usings, before namespace declaration
[assembly:ExportRenderer(typeof(WebView), typeof(DesktopWebViewRenderer))]
// this in your namespace
public class DesktopWebViewRenderer : WebViewRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<WebView> e)
{
base.OnElementChanged(e);
Control.Settings.UserAgentString = "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.4) Gecko/20100101 Firefox/4.0";
}
}
iOS
Xamarin Forms使用UIWebView,因此您需要调用
NSUserDefaults.StandardUserDefaults.RegisterDefaults(new NSDictionary("UserAgent",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/7046A194A"));
在你的启动代码中的某个地方。例如,在你的AppDelegate
的FinishedLaunching
方法中。
适当设置用户代理字符串。在Xamarin Forms中没有直接实现这个功能的方法,您需要编写自定义渲染器来实现。
iOS UIWebView
NSUserDefaults.StandardUserDefaults.RegisterDefaults(["UserAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/7046A194A"]);
web.CustomUserAgent = @"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.99 Safari/537.36";
安卓
string agent = "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.4) Gecko/20100101 Firefox/4.0";
web.Settings.UserAgentString = agent;
// 创建配置对象 let config = WKWebViewConfiguration() // 设置偏好设置 config.preferences = WKPreferences() config.preferences.minimumFontSize = 10 config.preferences.javaScriptEnabled = true // 创建 WKWebView 对象 let webView = WKWebView(frame: .zero, configuration: config) // 修改 user agent 实现请求桌面站点 webView.customUserAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36" // 加载 URL let url = URL(string: "https://www.example.com") let request = URLRequest(url: url!) webView.load(request)
注:为了实现请求桌面站点,这里将customUserAgent
设为了模拟 macOS 上的 Chrome 浏览器。 - Sven-Michael Stübe