xamarin.android webview与js的交互

留做备份

      在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);
        }
    }



    

    


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值