Android Web 视图:获取响应 Header HTML
Android WebView: Get Response Header HTML
在我的 Xamarin 应用程序中,我使用 WebView 从服务中检索数据。信息存储在HTML.
头部的meta-tag
在 Xamarin.iOS 中,我可以使用以下代码设法访问此信息:
webView.LoadFinished += async (sender, args) => {
var request = webView.Request;
if (request != null) {
var url = request.Url.AbsoluteString;
var data = NSData.FromUrl(NSUrl.FromString(Url));
var content = data.ToString();
var splits = content.Split("<meta").ToList();
var taggedSplit = splits.Find(x => x.Contains("myTag"));
if (!string.IsNullOrEmpty(taggedSplit)) {
// do stuff
}
}
}
但我找不到 Xamarin.Android 的有效解决方案。
我尝试了 方法但没有成功。
也许你能帮我解决这个问题。
你可以通过注入一段js代码来获取值,这里有一个简单的例子,你可以检查一下。
在 activity 中:
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.activity_other);
webView = FindViewById<WebView>(Resource.Id.webView1);
webView.SetWebViewClient(new WebViewClientClass());
WebSettings websettings = webView.Settings;
websettings.JavaScriptEnabled = true;
websettings.DomStorageEnabled = true;
webView.AddJavascriptInterface(new Foo(this), "Foo");
webView.LoadUrl("file:///android_asset/demo.html");
}
class WebViewClientClass : WebViewClient
{
public override void OnPageFinished(WebView view, string url)
{
//access to parse < meta name = "viewport" content = "get the value of content" >
view.LoadUrl("javascript:window.Foo.showSource("
+ "document.querySelector('meta[name=\"viewport\"]').getAttribute('content')"
+ ");");
base.OnPageFinished(view, url);
}
}
class Foo : Java.Lang.Object
{
Context context;
public Foo(Context context)
{
this.context = context;
}
[JavascriptInterface]
[Export]
public void showSource(string source)
{
// here you could get the value of meta content
// in this example,i could get source = "width =device-width,initial-scale=1, maximum-scale=1"
Log.Error("content", html);
}
}
本地 html :
<html>
<head>
<meta name="viewport" content="width =device-width,initial-scale=1, maximum-scale=1">
</head>
<body>
...
</body>
</html>
在我的 Xamarin 应用程序中,我使用 WebView 从服务中检索数据。信息存储在HTML.
头部的meta-tag在 Xamarin.iOS 中,我可以使用以下代码设法访问此信息:
webView.LoadFinished += async (sender, args) => {
var request = webView.Request;
if (request != null) {
var url = request.Url.AbsoluteString;
var data = NSData.FromUrl(NSUrl.FromString(Url));
var content = data.ToString();
var splits = content.Split("<meta").ToList();
var taggedSplit = splits.Find(x => x.Contains("myTag"));
if (!string.IsNullOrEmpty(taggedSplit)) {
// do stuff
}
}
}
但我找不到 Xamarin.Android 的有效解决方案。 我尝试了 方法但没有成功。
也许你能帮我解决这个问题。
你可以通过注入一段js代码来获取值,这里有一个简单的例子,你可以检查一下。
在 activity 中:
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.activity_other);
webView = FindViewById<WebView>(Resource.Id.webView1);
webView.SetWebViewClient(new WebViewClientClass());
WebSettings websettings = webView.Settings;
websettings.JavaScriptEnabled = true;
websettings.DomStorageEnabled = true;
webView.AddJavascriptInterface(new Foo(this), "Foo");
webView.LoadUrl("file:///android_asset/demo.html");
}
class WebViewClientClass : WebViewClient
{
public override void OnPageFinished(WebView view, string url)
{
//access to parse < meta name = "viewport" content = "get the value of content" >
view.LoadUrl("javascript:window.Foo.showSource("
+ "document.querySelector('meta[name=\"viewport\"]').getAttribute('content')"
+ ");");
base.OnPageFinished(view, url);
}
}
class Foo : Java.Lang.Object
{
Context context;
public Foo(Context context)
{
this.context = context;
}
[JavascriptInterface]
[Export]
public void showSource(string source)
{
// here you could get the value of meta content
// in this example,i could get source = "width =device-width,initial-scale=1, maximum-scale=1"
Log.Error("content", html);
}
}
本地 html :
<html>
<head>
<meta name="viewport" content="width =device-width,initial-scale=1, maximum-scale=1">
</head>
<body>
...
</body>
</html>