我有一个 WebView,在其中显示我的网站,在该网站中我有 3 个按顺序的页面,在这 3 个页面中,我需要识别用户何时位于最后一页,并从中获取 html 内容显示该页面。
我设法做了一个 WebViewClient,现在我可以识别用户何时位于最后一页,问题是我不知道如何移动它,我不知道如何从中获取 html 内容那个页面。
这是我到目前为止所拥有的:
namespace WebViewExample
{
[Activity(Label = "WebView", MainLauncher = true)]
public class WebView : Activity
{
Android.Webkit.WebView web_view;
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
// Set our view from the "main" layout resource
SetContentView(Resource.Layout.WebView);
web_view = FindViewById<Android.Webkit.WebView>(Resource.Id.webview);
web_view.Settings.JavaScriptEnabled = true;
web_view.SetWebViewClient(new MyWebViewClient());
web_view.LoadUrl(url);
}
public class MyWebViewClient : WebViewClient
{
public override bool ShouldOverrideUrlLoading(Android.Webkit.WebView view, string url)
{
view.LoadUrl(url);
return true;
}
public override void OnPageStarted(Android.Webkit.WebView view, string url, Android.Graphics.Bitmap favicon)
{
base.OnPageStarted(view, url, favicon);
}
public override void OnPageFinished(Android.Webkit.WebView view, string url)
{
base.OnPageFinished(view, url);
int i = 0;
}
}
}
}
谢谢。
最佳答案
- 创建一个 C# 类,其中包含要从 javaScript 调用的方法
- 如果您的 Android API 级别为 17 或更高版本,此类需要使用 [JavascriptInterface] 和 [Export] 注释每个 JavaScript 可调用方法
- 您的 WebView 应调用 AddJavascriptInterface() 方法
- 页面加载完成时会调用onPageFinished()方法
这是代码:
namespace WebViewTest{
[Activity(Label = "WebViewTest", MainLauncher = true, Icon = "@drawable/icon")]
public class MainActivity : Activity
{
Android.Webkit.WebView web_view;
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.Main);
web_view = FindViewById<Android.Webkit.WebView>(Resource.Id.webview);
web_view.Settings.JavaScriptEnabled = true;
web_view.SetWebViewClient(new MyWebViewClient());
web_view.LoadUrl("http://stackoverflow.com/questions/40943265/xamarin-android-get-html-content");
// 3. your WebView must call AddJavascriptInterface() method
web_view.AddJavascriptInterface(new InJavaScriptLocalObj(), "local_obj");
}
}
public class MyWebViewClient : WebViewClient
{
private int count;
public override bool ShouldOverrideUrlLoading(Android.Webkit.WebView view, string url)
{
view.LoadUrl(url);
return true;
}
public override void OnPageStarted(Android.Webkit.WebView view, string url, Android.Graphics.Bitmap favicon)
{
base.OnPageStarted(view, url, favicon);
}
public override void OnPageFinished(Android.Webkit.WebView view, string url)
{
base.OnPageFinished(view, url);
count++;
//page count
// 4.The method of onPageFinished() will be called when page loading finished
if (count == 2)
{
view.LoadUrl("javascript:window.local_obj.showSource('<head>'+"
+ "document.getElementsByTagName('html')[0].innerHTML+'</head>');");
count = 0;
}
}
}
//1. Create a c# class that contains methods to be called from javaScript.
//The Method is that called in javaScript.
public sealed class InJavaScriptLocalObj : Java.Lang.Object
{
//2.if your Android API level 17 or later,
//This class must annotate each JavaScript-callable method with [JavascriptInterface] and [Export]
[Export]
[JavascriptInterface]
public void showSource(string html)
{
// System.out.println("====>html=" + html);
}
}
}
关于android - Xamarin Android : Get HTML content,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40943265/