Android与JS之间跨平台异步调用实例详解
程序员文章站
2024-03-02 13:57:46
android与js之间跨平台异步调用
为什么突然要搞这个问题呢?
在开发浏览器的时候遇到这个狗血的问题,花了将近1天的时间才想到这个解决方案,a...
android与js之间跨平台异步调用
为什么突然要搞这个问题呢?
在开发浏览器的时候遇到这个狗血的问题,花了将近1天的时间才想到这个解决方案,android与javascirpt互调。
因为接口是抓取的别人的,所以出现了js跨域问题,android闪亮登场搞定了。
gif动画演示
webview相关设置
websettings mwebsettings = getsettings(); mwebsettings.setdefaulttextencodingname("utf-8");//设置默认的显示编码 mwebsettings.setjavascriptenabled(true);//调用js方法.安卓版本大于17,加上注解 @javascriptinterface
直接放大招->贴代码
android
addjavascriptinterface(new object() { @javascriptinterface public void toastmessage(final string url, final int type, final int dir) { l.e("url = " + url + " type = " + type + " dir = " + dir); apiwrapper.getinstance() .getlenovoword(url) .subscribeon(schedulers.io()) .observeon(androidschedulers.mainthread()) .subscribe(new rxsubscriber<responsebody>() { @override public void _onnext(responsebody responsebody) { try { string data = responsebody.string(); l.e("data = " + data); loadurl("javascript:rescompleted(" + data + "," + type + "," + dir + ")"); } catch (ioexception e) { e.printstacktrace(); } } @override public void _onerror(string msg) { loadurl("javascript:rescompleted(" + msg + ")"); } }); } }, "android");
html
<html> <meta name="viewport" content="width=device-width,height=device-height,inital-scale=1.0,maximum-scale=1.0,user-scalable=no;"> <head> <title>js调用android代码</title> <style> #button-call{ width: 100%; padding: 20px; font-size: 20px; } #div_bg{ background: #cccccc; margin-top: 50px; } </style> <script type="text/javascript"> window.onload=function() { document.getelementbyid('button_call').onclick=function(){ window.android.toastmessage("http://api.sina.cn/sinago/list.json?channel=news_toutiao",1, 0); } } function rescompleted(result,type,dir) { document.getelementbyid('div_bg').innerhtml='android调用js代码-成功!!!'+json.stringify(result); } </script> </head> <body> <button id="button_call">js调用android代码</button> <div id="div_bg"></div> </body> </html>
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!