android开发中源生代码向JS中传值问题
来源:互联网 发布:货运软件哪个最好 编辑:程序博客网 时间:2024/06/03 22:57
关于android开发中JS与webview进行交互的文章网上已经很多,但是百度搜了一下关于源生代码向JS中传递返回值的问题说法五花八门,在此将项目中解决办法记录一下
public class MainActivity extends AppCompatActivity { private static final String LOG_TAG = "WebViewDemo"; private WebView mWebView; private Handler mHandler = new Handler(); @SuppressLint("JavascriptInterface") @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.activity_main); mWebView = (WebView) findViewById(R.id.webview); WebSettings webSettings = mWebView.getSettings(); webSettings.setSavePassword(false); webSettings.setSaveFormData(false); webSettings.setJavaScriptEnabled(true); webSettings.setSupportZoom(false); mWebView.setWebChromeClient(new MyWebChromeClient()); mWebView.addJavascriptInterface(new DemoJavaScriptInterface(), "demo"); mWebView.loadUrl("http://www.jz100.com/static/test.html"); } final class DemoJavaScriptInterface { DemoJavaScriptInterface() { } /** * This is not called on the UI thread. Post a runnable to invoke * loadUrl on the UI thread. */ @JavascriptInterface public void clickOnAndroid(String test) { Toast.makeText(MainActivity.this, test, Toast.LENGTH_SHORT).show(); } @JavascriptInterface public String GetLat() { return "123"; } } /** * Provides a hook for calling "alert" from javascript. Useful for * debugging your javascript. */ final class MyWebChromeClient extends WebChromeClient { @Override public boolean onJsAlert(WebView view, String url, String message, JsResult result) { Log.d(LOG_TAG, message); result.confirm(); return true; } }}
在源生代码中调用webSettings.setJavaScriptEnabled(true)方法表示支持js脚本,然后在addJavascriptInterface中传入于js交互的方法类,在该类中写提供给JavaScript调用的方法,记住加上@JavascriptInterface注解,否则js还是无法识别。若想给js返回值,只需设置接口函数的回调值即可。
js的调用代码如下:
<html><script language="javascript"> var lat; function initialize(){ lat = window.demo.GetLat(); }</script><body onload="initialize()"><!-- Calls into the javascript interface for the activity --><a id="btn_test" onClick="window.demo.clickOnAndroid(lat)"> <div style="width:80px; margin:0px auto; padding:10px; text-align:center; border:2px solid #202020;" > Click me! </div></a></body></html>在js中调用源生方法函数为window.demo.函数名,其中demo为mWebView.addJavascriptInterface方法中的第二个参数,若想获得返回值,只需接收其回调即可。
0 1
- android开发中源生代码向JS中传值问题
- Android中向webview注入js代码
- 向页面注入JS代码
- Android 开发中遇到的问题-----个人向
- Android java代码与js交互问题
- AJAX 解决 JSP中JS向JAVA代码传参数问题!
- Android开发代码的效率问题
- js向div中追加html代码
- JavaWeb开发中关于JS校验的代码优化问题
- 关于JS的页面跳向问题
- php向js传值问题
- js代码问题
- js代码顺序问题
- android开发中是用Intent从一个activity跳向一个activity的问题
- 向Android社区贡献代码过程详解
- 向Android社区贡献代码过程详解
- 向Android社区贡献代码过程详解
- 向Android社区贡献代码过程详解
- 欧拉项目第四题 Largest palindrome product
- Java反射之gettter和setter方法
- Android Hook神器——XPosed入门(登陆劫持演示)
- Android Studio使用教程(二)
- 民数记研读2——于宏洁
- android开发中源生代码向JS中传值问题
- linux Qt无法自动加载数据库驱动
- N个降序数组,找到最大的K个数
- C#操作SQLServer中的二进制类型的数据方法
- 跳转页面的加载数据提示
- Windows,Linux,Mac系统中,USB HID枚举过程的异同
- DataGridView改变行的颜色
- CentOS7.1 KVM虚拟化之linux虚拟机安装(2)
- OpenStack与SDN控制器的集成