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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android WebView与JavaScript交互详解

發(fā)布時間:2023/12/15 Android 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android WebView与JavaScript交互详解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

近期工作項目中遇到Android的WebView與js交互問題,之前也知道有這方面的技術可以實現(xiàn)。但在用的過程中,卻發(fā)現(xiàn)還是需要用電心思。

現(xiàn)把我所了解的分享給大家,希望可以幫助到做類似項目的童鞋。

為方便演示,就在Android_assets下放置一個html。


html中內容展示如下

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Untitled Document</title> </head> <div id="div" style="width:100px; height:100px; background-color:#099;" οnclick="window.demo.javaMethod()"> </div> <body> </body> <script type="text/javascript"> function changeColor(){document.getElementById("div").style.backgroundColor='red';} </script> </html>

先來測試JavaScript調用java方法

步驟:

1.首先需要對WebView開啟對JavaScript支持

2.WebView向JavaScript暴露一個接口提供調用

3.html元素通過onClick等事件調用java方法

代碼粘貼如下

package com.example.admin.webview; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.webkit.JavascriptInterface; import android.webkit.WebSettings; import android.webkit.WebView; import android.widget.Toast; import java.io.BufferedReader; import java.io.InputStreamReader; public class MainActivity extends AppCompatActivity {private WebView webView; @Override protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); webView= (WebView) findViewById(R.id.webview); WebSettings settings=webView.getSettings(); //開啟對JavaScript的支持 settings.setJavaScriptEnabled(true); //加載本地assets下的html文件 webView.loadDataWithBaseURL(null,getFromAssets("test.html"),"text/html","utf-8",null); //參數(shù)1 Object對象 參數(shù)2 名稱 webView.addJavascriptInterface(MainActivity.this,"demo"); }private String getFromAssets(String fileName){try {InputStreamReader inputReader = new InputStreamReader( getResources().getAssets().open(fileName) ); BufferedReader bufReader = new BufferedReader(inputReader); String line=""; String Result=""; while((line = bufReader.readLine()) != null)Result += line; return Result; } catch (Exception e) {e.printStackTrace(); return null; }}@JavascriptInterface public void javaMethod(){Toast.makeText(MainActivity.this, "javascript調用了java方法!", Toast.LENGTH_SHORT).show(); } }


效果圖





需要注意的地方就是JavaScript中 ?window.展露名稱.方法名 ? ?這里必須對應


下面是java調用js方法

步驟:

1.開啟JavaScript支持

2.使用WebView的loadURl方法調用JavaScript方法

代碼粘貼如下

package com.example.admin.webview; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.webkit.WebSettings; import android.webkit.WebView; import android.widget.Button; import java.io.BufferedReader; import java.io.InputStreamReader; public class MainActivity extends AppCompatActivity {private WebView webView; private Button bt_test; @Override protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); webView= (WebView) findViewById(R.id.webview); bt_test= (Button) findViewById(R.id.bt_test); WebSettings settings=webView.getSettings(); //開啟對JavaScript的支持 settings.setJavaScriptEnabled(true); //加載本地assets下的html文件 webView.loadDataWithBaseURL(null,getFromAssets("test.html"),"text/html","utf-8",null); bt_test.setOnClickListener(new View.OnClickListener() {@Override public void onClick(View v) {webView.loadUrl("javascript:changeColor()"); }}); }private String getFromAssets(String fileName){try {InputStreamReader inputReader = new InputStreamReader( getResources().getAssets().open(fileName) ); BufferedReader bufReader = new BufferedReader(inputReader); String line=""; String Result=""; while((line = bufReader.readLine()) != null)Result += line; return Result; } catch (Exception e) {e.printStackTrace(); return null; }} }

效果圖 ? ? 點擊測試按鈕 ?調用js方法 ? 將div顏色改變?yōu)榧t色







這也就是普遍的WebView與js交互的方式

那么問題來了,如果JavaScript方法有返回值時候,會怎么樣?

先來測試一下

?修改html中JavaScript代碼為

<script type="text/javascript"> function changeColor(){document.getElementById("div").style.backgroundColor='red';return "qwertyuiop";} </script> 再點擊按鈕





這個時候WebView出現(xiàn)了重定向

解決方案如下

在Android4.4以后,WebView新增了一個API--evaluateJavascript(String script,ValueCallback<ResultType>)

用法如下

bt_test.setOnClickListener(new View.OnClickListener() {@Override public void onClick(View v) {webView.evaluateJavascript("changeColor()", new ValueCallback<String>() {@Override public void onReceiveValue(String value) {Toast.makeText(MainActivity.this, "返回值"+value, Toast.LENGTH_SHORT).show(); }}); } }); 效果如下


至于4.4之前的該怎么辦?

目前的解決方案是通過java反射機制

在android.webkit包中有個BrowserFrame私有類,該類中有個Native方法:

public native String stringByEvaluatingJavaScriptFromString(String script)

使用步驟

1.擴展WebView添加方法,并使用反射實現(xiàn)。

2.將布局文件中的WebView修改為自定義的WebView

3.使用新的WebView調用方法,執(zhí)行js方法獲取返回值


自定義WebView如下

????public?String stringByEvaluatingJavaScriptFromString(String script) {

???????try?{

???????????//由webview取到webviewcore

???????????Field field_webviewcore = WebView.class.getDeclaredField("mWebViewCore");??????????????

???????????field_webviewcore.setAccessible(true);

???????????Object obj_webviewcore = field_webviewcore.get(this);

???????????//由webviewcore取到BrowserFrame

???????????Field field_BrowserFrame = obj_webviewcore.getClass().getDeclaredField("mBrowserFrame");

???????????field_BrowserFrame.setAccessible(true);

???????????Object obj_frame = field_BrowserFrame.get(obj_webviewcore);???????

???????????//獲取BrowserFrame對象的stringByEvaluatingJavaScriptFromString方法

???????????Method method_stringByEvaluatingJavaScriptFromString = obj_frame.getClass().getMethod("stringByEvaluatingJavaScriptFromString", String.class);

???????????//執(zhí)行stringByEvaluatingJavaScriptFromString方法

???????????Object obj_value = method_stringByEvaluatingJavaScriptFromString.invoke(obj_frame, script);

???????????//返回執(zhí)行結果

???????????return?String.valueOf(obj_value);

???????}?catch?(SecurityException e) {

???????????//?TODO?Auto-generated catch block

???????????e.printStackTrace();

???????}?catch?(NoSuchFieldException e) {

???????????//?TODO?Auto-generated catch block

???????????e.printStackTrace();

???????}?catch?(IllegalArgumentException?e) {

???????????//?TODO?Auto-generated catch block

???????????e.printStackTrace();

???????}?catch?(IllegalAccessException e) {

???????????//?TODO?Auto-generated catch block

???????????e.printStackTrace();

???????}?catch?(NoSuchMethodException e) {

???????????//?TODO?Auto-generated catch block

???????????e.printStackTrace();

???????}?catch?(InvocationTargetException e) {

???????????//?TODO?Auto-generated catch block

???????????e.printStackTrace();

???????}

???????return?null;

????}

}


轉自:https://blog.csdn.net/sy18298711239/article/details/51945478

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結

以上是生活随笔為你收集整理的Android WebView与JavaScript交互详解的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 在线免费观看亚洲 | 国产日韩欧美视频在线观看 | 人人妻人人澡人人爽精品日本 | 色综合天天操 | 国产成人传媒 | 欧美韩一区 | 日韩视频在线免费播放 | 香蕉伊人| 女人久久久 | 男人的天堂av女优 | 黄视频免费在线看 | 中国黄色a级 | 强行糟蹋人妻hd中文 | 国产精品一区二区av | 蜜桃久久久久 | 久久精品7 | 亚洲黄a| 中文字幕网站 | 成人免费网址 | 亚洲精品二 | 伊人网在线 | 91大神久久| 国产成人综合亚洲 | 中文在线字幕免费观看电 | 人妻一区二区三 | 九一精品视频 | 四虎精品| 黄色一级小说 | 亚洲精品福利在线观看 | 成人免费看片又大又黄 | 日本高清视频网站 | 最近最新中文字幕 | 亚洲精品成人久久 | 麻豆视频免费在线观看 | 国产精品一卡二卡 | 日韩精品极品视频免费观看 | 日本第一页 | 99成人在线视频 | jizz一区二区 | 成人合集| 亚洲国产日韩a在线播放性色 | 欧美人与禽猛交乱配 | 久久99精品国产麻豆91樱花 | 黄网站免费大全入口 | 免费大片黄在线观看 | 97麻豆视频| 国产电影免费观看高清完整版视频 | 在线观看视频99 | 欧美日韩一本 | 亚洲av综合色区无码一区 | 中国在线观看片免费 | 很黄很黄的网站 | 2021av在线| 蜜桃视频在线观看www | 国内一级黄色片 | 欧美99| 咪咪av | 色综合久久五月 | 婷婷国产精品 | 激情视频激情小说 | 日本一区二区在线看 | 一区二区三区在线免费观看视频 | 91免费视频观看 | av每日更新 | 国产精品久久久久久久久久久免费看 | 国产亚洲一区在线 | 97超碰资源总站 | 日韩av中文在线观看 | 日韩在线不卡av | 国产日韩欧美精品一区二区 | 中文字幕丰满人伦在线 | 一级做a在线观看 | 人人妻人人澡人人爽人人欧美一区 | 国产激情91| 播播开心激情网 | 能免费看18视频网站 | 久久av综合网 | 激情黄色小说网站 | 伊人免费 | 久草综合在线视频 | 国产日产精品一区二区三区四区 | 国产在线观看黄 | 波多野结衣小视频 | 多男调教一女折磨高潮高h 国内毛片毛片毛片毛片毛片 | 国产三级中文字幕 | youjizz日韩 | 亚洲精品国产99 | 在线亚洲区 | 亚洲艹| 中文字幕资源网 | 久久久久久久一区 | 波多野结衣视频免费看 | 日韩a毛片 | 日本少妇作爱视频 | 男女插插网站 | 日韩精品在线一区二区三区 | 波多野结衣a级片 | 国产精品91一区 | 国产肉体xxxx裸体784大胆 |