留做备份
在Activity中的OnCreate方法配置
var webview = FindViewById<WebView>(Resource.Id.webView1);
WebSettings settings = webview.Settings;
//启用js事件
settings.SetSupportZoom(true);
settings.JavaScriptEnabled = true;
//启用js的dom缓存
settings.DomStorageEnabled = true;
//加载javascript接口方法,以便调用前台方法
webview.AddJavascriptInterface(new AndroidMethod(this), "AndroidMethod");
webview.SetWebViewClient(new WebViewClient());
其中,第2个AndroidMethod为js需要调用的接口的名字
public class AndroidMethod : Java.Lang.Object//注意一定要继承java基类
{
Activity _activity = null;
public AndroidMethod(Activity activity)
{
_activity = activity;
}
/// <summary>
/// 弹出有消息的提示框(有参无反)
/// </summary>
/// <param name="Message"></param>
[Export("ShowToast")]//这个是js调用的c#类中方法名
[JavascriptInterface]//表示这个Method是可以被js调用的
public void ShowToast(string Message)
{
Toast.MakeText(_activity.ApplicationContext, Message, ToastLength.Short).Show();
}
/// <summary>
/// 有参有反
/// </summary>
/// <param name="Message"></param>
[Export("ReturnMessage")]
[JavascriptInterface]
public String ReturnMessage(string Message)
{
return Message + "123";
}
}
js调用c#方法:
有参无反:function ShowToast(message) {
//AndroidMethod与上文保持一致,ShoToast 为方法名,与[Export("ShowToast")]里面的值保持一致
javascript: AndroidMethod.ShowToast(message);
}
有参有反:
function test(value) {
var v = "";
javascript: v = AndroidMethod.ReturnMessage(value);
return v;
}
c#调用js方法:
html加载完后手动调用:
//CloseAddRegion为js的一个function
//null是回调函数(博主目前不太会用)
webview.EvaluateJavascript("CloseAddRegion()", null);
html加载完后自动调用:(举个栗子,在我们的html页中,我们需要通过js去获取当前系统的版本号,执行不同function,那么使用下面这个方法即可)
需要重新设置webviewClient
webview.SetWebViewClient(new HybridWebViewClient_No(fun));//其中fun为js的function,例如:"a();b();"
HybridWebViewClient_No类如下:
/// <summary>
/// 使webview初始化的时候自动调用内部的js事件
/// </summary>
public class HybridWebViewClient_No : WebViewClient
{
String _Fun;
public HybridWebViewClient_No(String Fun)
{
_Fun = Fun;
}
public override void OnPageFinished(WebView view, string url)
{
base.OnPageFinished(view, url);
view.EvaluateJavascript(_Fun, null);
}
}