JS与Native交互
来源:互联网 发布:oa软件下载 编辑:程序博客网 时间:2024/06/07 07:42
实现JS和Native有两种方式:
- shouldOverrideUrlLoading(WebView view, String url)
- js与java互相调用
先来说一下第一种方式shouldOverrideUrlLoading(WebView view, String url)
通过给WebView加一个事件监听对象(WebViewClient)并重写shouldOverrideUrlLoading(WebView view, String url)方法。当按下某个连接时WebViewClient会调用这个方法,并传递参数view和url
开始第二种.JS和Java互调
如何实现java和js互调
- WebView开启JavaScript脚本执行
- WebView设置供JavaScript调用的交互接口
- 客户端和网页端编写调用对方的代码
JS调用JAVA
JS : window.jsInterfaceName.methodName(parameterValues)
native: webView.addJavascriptInterface(new JsInteration(), “androidNative”);
下面给出一个实例,方便理解
webView.addJavascriptInterface(new JsInteration(), “androidNative”);@JavascriptInterfacepublic void helloJS(){…}
window.androidNative.helloJS();
Java调用JS
webView调用js的基本格式为webView.loadUrl(“javascript:methodName(parameterValues)”)
- 调用js无参无返回值函数: String call =“javascript:sayHello()”;webView.loadUrl(call);
- 调用js有参无返回值函数:String call = “javascript:alertMessage(\”” + “content” + “\”)”; webView.loadUrl(call);
- 调用js有参数有返回值的函数
Android在4.4之前并没有提供直接调用js函数并获取值的方法,所以在此之前,常用的思路是 java调用js方法,js方法执行完毕,再次调用java代码将值返回。
Android 4.4之后使用evaluateJavascript即可。
private void testEvaluateJavascript(WebView webView) { webView.evaluateJavascript("getGreetings()", new ValueCallback<String>() { @Override public void onReceiveValue(String value) { Log.i(LOGTAG, "onReceiveValue value=" + value); }});}
注:
- 参数类型如果是简单的int或String,可以直接传,对于复杂的数据类型,建议以字符串形式的json返回。
- evaluateJavascript方法必须在UI线程(主线程)调用,因此onReceiveValue也执行在主线程。
当native与js交互时存cookie看到很多人遇到过这样一个问题,cookie存不进去,网上有很多解释方案,但是很多没说到重点上,这里直接贴一下代码:
public static void synCookies(Context context, String url, String version) { CookieSyncManager.createInstance(context); CookieManager cookieManager = CookieManager.getInstance(); cookieManager.setAcceptCookie(true); cookieManager.removeAllCookie(); cookieManager.setCookie(url, "sessionKey=" + UserInfoShareprefrence.getInstance(context).getLocalSessionKey()); cookieManager.setCookie(url, "productVersion=android-epocket-v" + version); CookieSyncManager.getInstance().sync(); }
存不进去的很大一部分原因是你的url不对,他官方给出的解释是这样的
/** * Sets a cookie for the given URL. Any existing cookie with the same host, * path and name will be replaced with the new cookie. The cookie being set * will be ignored if it is expired. * * @param url the URL for which the cookie is to be set * @param value the cookie as a string, using the format of the 'Set-Cookie' * HTTP response header */ public void setCookie(String url, String value) { throw new MustOverrideException(); }
其实没说明白url到底是什么,这里的url就是显示的url的域名,这里顺便贴出取域名的方法,给出的是通过正则提取域名
/** * 获得域名 * * @param url * @return */ public static String getDomain(String url) { Pattern p = Pattern.compile("[^//]*?\\.(com|cn|net|org|biz|info|cc|tv)", Pattern.CASE_INSENSITIVE); Matcher matcher = p.matcher(url); matcher.find(); return matcher.group(); }
还有一点就是,如果你想传递多个值给cookie的话,可以多次使用setCookie,不要擅自的自己拼值,因为你拼的字符串中可能存在分号,内部多分号做了特殊处理,截取分号之前的,之后的直接放弃!
- JS与Native交互
- JS与NATIVE交互
- js与native交互
- JS与Native交互
- JS与Native交互初识
- iOS 开发之JS与Native交互
- Android中JS与Native原生交互
- native与js交互(WKWebView )
- JS-native交互<一>
- Android 中 native与Html中Js 交互
- UIWebView的js与native代码的交互
- 关于android混淆之后js与native方法交互
- js 与 native 交互时有时候不能触发shouldStartLoadWithRequest方法
- REACT NATIVE(JS/ES)与IOS(OBJECT-C)交互通信
- native与html5交互
- Native与html5交互
- Native与H5交互
- native与h5交互
- ListView如何实现单选,默认选中一条。
- windows以及linux 环境下Google Protocol Buffer 下载编译安装教程
- pod install unable to exec Xcode native xcrun (Permission denied)
- 推荐几本介绍Android Studio开发的好书
- Eclipse+NDK+adt+cdt开发环境问题解决
- JS与Native交互
- PLSQL Developer常用设置及快捷键
- 在Blender中创建一个适用全景播放的sphere
- Android 关于页卡布局的一个小技巧---如何在当前页刷新数据
- 注册表reg文件编写
- JS设计模式-单例模式
- SVN
- 【容斥原理-求区间内与n互质的数】HDOJ Co-prime 4135
- hdu3045 Picnic Cows