我要做的基本上是在这里回答的内容:
how to get html content from a webview?
但是,我正在使用C#中的Xamarin,并且最高答案中给出的代码是在Java中。我尝试将其转换为C#,如下所示:
public class LoginWebViewController : Activity
{
WebView localWebView;
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.WebView);
localWebView = FindViewById<WebView>(Resource.Id.LocalWebView);
localWebView.SetWebViewClient(new JustWebViewClient());
localWebView.LoadUrl(LoginOperations.GetTPLoginUrl());
localWebView.Settings.JavaScriptEnabled = true;
localWebView.AddJavascriptInterface(new MyJavaScriptInterface(this), "HtmlViewer");
}
class MyJavaScriptInterface
{
private Context ctx;
MyJavaScriptInterface(Context ctx)
{
this.ctx = ctx;
}
public void showHTML(String html)
{
Console.WriteLine(html);
}
}
}
但是我收到以下错误:
我尝试将类更改为public,但仍然会出现相同的错误。怎么了?
附加代码:
public class MyWebViewClient : WebViewClient
{
public override void OnPageFinished(WebView view, String url)
{
base.OnPageFinished(view,url);
Console.WriteLine("DONE LOADING PAGE");
view.LoadUrl("javascript:HtmlViewer.showHTML" +
"('<html>'+document.getElementsByTagName('html')[0].innerHTML+'</html>');");
}
}
最佳答案
您的构造函数不是公共的,您必须从Java.Lang.Object
继承。您还必须添加Export
属性。
class MyJavaScriptInterface : Java.Lang.Object
{
private Context ctx;
public MyJavaScriptInterface(Context ctx)
{
this.ctx = ctx;
}
public MyJavaScriptInterface(IntPtr handle, JniHandleOwnership transfer)
: base (handle, transfer)
{
}
[Export("showHTML")]
public void showHTML(string html)
{
Console.WriteLine(html);
}
}
而且在您的JavaScript代码中也是一个错误。您在
(
之后缺少开头showHTML
。view.LoadUrl("javascript:HtmlViewer.showHTML(" + ...
关于c# - 从Android中的Webview获取html内容(将Xamarin与C#结合使用),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39823297/