日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java与js交互,相互调用传参

發布時間:2025/3/20 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java与js交互,相互调用传参 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
隨著前端技術的發展與H5的廣泛使用,移動端采用native+h5的方式越來越多了,對于Android來說就涉及到java與js的交互,相互調用傳參等。下面就來看一下java與js交互的簡單demo。 方式實現js調用java有四種方式:1.JavascriptInterface2.WebViewClient.shouldOverrideUrlLoading()3.WebChromeClient.onConsoleMessage()4.WebChromeClient.onJsPrompt()JavascriptInterface這種方式是Android官方提供的Javascript與Native通信的解決方案。java中創建接口public class DemoInteface {@android.webkit.JavascriptInterfacepublic void fromJs(String toast) {Toast.makeText(MainActivity.this, toast, Toast.LENGTH_SHORT).show();}}將接口添加到WebView中webView = (WebView) findViewById(R.id.wb);WebSettings settings = webView.getSettings();settings.setJavaScriptEnabled(true);webView.loadUrl("file:///android_asset/test.html");webView.addJavascriptInterface(new DemoInteface(), "demo");將接口添加到WebView中<body><a href="javascript:;" class="m-btn" οnclick="showToast('js的問候送達')">Toast</a><script language="javascript">function showToast(toast) {javascript:demo.fromJs(toast);};</script></body>注意js中的javascript:demo.fromJs(toast); 其中類名(dmeo)要與 webView.addJavascriptInterface(new DemoInteface(), “demo”);中第二個參數一致,方法名要與接口中方法的名稱一致

?

WebViewClient.shouldOverrideUrlLoading()這個方法是攔截webview中所有的url跳轉,根據url來判斷是否攔截,來執行不同的操作java代碼public class CustomWebViewClient extends WebViewClient {@Overridepublic boolean shouldOverrideUrlLoading(WebView view, String url) {if (url.contains("toast")) {Log.e("yue", url);Toast.makeText(MainActivity.this, "攔截成功了", Toast.LENGTH_SHORT).show();return true;}return super.shouldOverrideUrlLoading(view, url);}}webView.setWebViewClient(new CustomWebViewClient());js代碼<a href="https://www.baidu.com/?=toast" class="m-btn">Toast2</a>1

?

WebChromeClient.onConsoleMessage()這是Android提供給Javascript調試在Native代碼里面打印日志信息的API。javapublic class CustomWebChromeClient extends WebChromeClient {@Overridepublic boolean onConsoleMessage(ConsoleMessage consoleMessage) {super.onConsoleMessage(consoleMessage);String msg = consoleMessage.message();//Javascript輸入的Log內容Log.d("fromjs",msg);return true;}}webView.setWebChromeClient(new CustomWebChromeClient());js代碼<a href="javascript:;" class="m-btn" οnclick="log()">log</a>function log(){console.log('log info from js');}

?

WebChromeClient.onJsPrompt()除了WebChromeClient.onJsPrompt(),還有WebChromeClient.onJsAlert()和WebChromeClient.onJsConfirm()。顧名思義,這三個Javascript給Native代碼的回調接口的作用分別是提示展示提示信息,展示警告信息和展示確認信息。因為極少會用這幾種,所以這里就不多做介紹實現java調用js:上面說了js調用java有很多方式,常用也是官方推薦的就是前兩種,而java調用js就只有一種方式,WebView.loadUrl(),androi 4.4(api 19)以上出現了WebView.evaluateJavascript()來代替loadUrl。java代碼button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if (android.os.Build.VERSION.SDK_INT >= 19) {webView.evaluateJavascript("javascript:wave()", null);} else {webView.loadUrl("javascript:wave('')");}}}); js代碼var flag = false;function wave() {if(!flag){flag = true;document.getElementById("droid").src="testb.png";}else{flag = false;document.getElementById("droid").src="testa.png";}}

?

?

以上就是一些簡單的js與java的交互。要想實現復雜的交互邏輯,可以使用jsBridge這一第三方框架,嚇篇博客講會介紹這一框架的使用及原理。代碼下載: http://download.csdn.net/detail/qq_27942511/9832172

?

轉載于:https://www.cnblogs.com/Free-Thinker/p/10684768.html

總結

以上是生活随笔為你收集整理的java与js交互,相互调用传参的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。