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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android:如何使用addJavaScriptInterface

發(fā)布時(shí)間:2025/5/22 Android 90 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android:如何使用addJavaScriptInterface 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

說明

本文將和大家分享Android中的 addJavaScriptInterface方式。這個(gè)類主要能幫助調(diào)用你的JavaScript函數(shù)中的任意活動(dòng)方式。其中有如下一些需要注意的地方:

  • addJavaScriptInterface方式幫助我們從一個(gè)網(wǎng)頁傳遞值到Android XML視圖(反之亦然)。
  • 你可以從網(wǎng)頁調(diào)用你的活動(dòng)類方式(反之亦然)。
  • 這是一個(gè)非常有用的功能,而當(dāng)WebView中的HTML是不能信賴的,這則是一個(gè)非常危險(xiǎn)的安全問題,因?yàn)楣粽呖梢宰⑷際TML執(zhí)行你的代碼。
  • 除非WebView所有HTML都是你寫的,否則不要使用addJavascriptInterface()。

本文包含如下要點(diǎn):

  • 執(zhí)行JavaScriptInterface及其方式。
  • 使用該界面,我們將綁定一個(gè)textview(文本視圖)控制。
  • demo app的源代碼。

使用代碼

我們將用到一個(gè)Eclipse ID,創(chuàng)建一個(gè)命名為JavaScriptInterfaceDemo的新項(xiàng)目。創(chuàng)建之后,即添加user permission for internet(用戶互聯(lián)網(wǎng)權(quán)限)到 AndroidManifest.xml文件中。

<uses-permission android:name="android.permission.INTERNET"/>

然后創(chuàng)建一個(gè)命名為www的文件夾,之后在該文件夾內(nèi)創(chuàng)建一個(gè)index.html文件。我們已經(jīng)在名為main.xml的布局文件使用WebView 和textview。main.xml代碼如下:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical" ><WebViewandroid:id="@+id/webView1"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_weight="1" /><LinearLayout android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical"android:layout_weight="1"><TextViewandroid:id="@+id/textView1"android:layout_width="wrap_content"android:layout_height="match_parent" android:textAppearance="?android:attr/textAppearanceLarge" /></LinearLayout> </LinearLayout>

在main.xml文件中,我們已經(jīng)用到一個(gè)父布局,它是一個(gè)線性布局,如果沒有它,我會(huì)用一些子控制和布局。

現(xiàn)在我們將寫更多行到JavaScriptInterfaceDemoActivity.java類。代碼如下:

package my.demo; import my.demo.R; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.os.Handler; import android.webkit.WebView; import android.widget.TextView; import android.widget.Toast;public class JavaScriptInterfaceDemoActivity extends Activity {private WebView Wv;private TextView myTextView; final Handler myHandler = new Handler();/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);Wv = (WebView)findViewById(R.id.webView1);myTextView = (TextView)findViewById(R.id.textView1); final JavaScriptInterface myJavaScriptInterface= new JavaScriptInterface(this); Wv.getSettings().setLightTouchEnabled(true);Wv.getSettings().setJavaScriptEnabled(true);Wv.addJavascriptInterface(myJavaScriptInterface, "AndroidFunction");Wv.loadUrl("file:///android_asset/www/index.html"); }public class JavaScriptInterface {Context mContext;JavaScriptInterface(Context c) {mContext = c;}public void showToast(String webMessage){ final String msgeToast = webMessage; myHandler.post(new Runnable() {@Overridepublic void run() {// This gets executed on the UI thread so it can safely modify Views myTextView.setText(msgeToast);}});Toast.makeText(mContext, webMessage, Toast.LENGTH_SHORT).show();}} }

在Java類文件中,我們已經(jīng)將一些代碼寫入到oncreate方式。在這個(gè)方式中,我們用findViewById方式找到webview 和textview控制。然后創(chuàng)建一個(gè)JavaScriptInterface類。該類有一個(gè)構(gòu)建函數(shù),該函數(shù)初始化Context類。那么,什么是Context類呢?

Context類是一個(gè)抽象類,它允許訪問特定應(yīng)用資源和類,以及調(diào)用應(yīng)用程序級(jí)操作,諸如發(fā)起活動(dòng)、廣播和接收意圖等。

在構(gòu)建函數(shù)初始化后,創(chuàng)建一個(gè)名為showToast的方式,該方式有一個(gè)變量的msgeToast字符串,然后創(chuàng)建一個(gè)名為myHandler的Handler(處理器)。該處理器有一個(gè)Post方式,在該方式的聲明中,創(chuàng)建一個(gè)新的可運(yùn)行線程類的實(shí)例,在這個(gè)類里覆蓋一個(gè)運(yùn)行方式,該運(yùn)行方式設(shè)置textview控制的值。

現(xiàn)在在OnCreate方式中創(chuàng)建一個(gè)JavaScriptInterface實(shí)例。

final JavaScriptInterface myJavaScriptInterface = new JavaScriptInterface(this);

在JavaScriptInterface類初始化之后,添加一行到OnCreate方式。

Wv.addJavascriptInterface(myJavaScriptInterface, "AndroidFunction");

webview提供addJavascriptInterface方式。該方式包含兩項(xiàng)參數(shù):

  • 綁定到JavaScript的類實(shí)例。
  • 用來顯示JavaScript中的實(shí)例的名稱。

對(duì)于webview,我們需要弟阿勇一些設(shè)置來啟用JavaScript。

Wv.getSettings().setJavaScriptEnabled(true);

最后,需要在webview中提供一個(gè)web URL:

Wv.loadUrl("file:///android_asset/www/index.html");

然后創(chuàng)建一個(gè)命名為index.html的HTML文件。該HTML有一個(gè)文本框和一個(gè)提交按鈕。HTML文件代碼如下:

<!DOCTYPE > <html xmlns="http://www.w3.org/1999/xhtml" debug="true"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"><meta name="apple-mobile-web-app-capable" content="yes"><meta name="viewport" content="target-densitydpi=device-dpi" /><script type="text/javascript">function init(){var testVal = document.getElementById('mytextId').value;AndroidFunction.showToast(testVal);}</script></head><body> <div style="float: left;width: 50%;"><input type="text" style="width: 180px;" name="myText" id="mytextId" /></div><div style="clear: both;height: 3px;"> </div><div><input value="submit" type="button" name="submit" id="btnSubmit" onclick="javascript:return init();" /> </div> </body> </html>

該HTML文件有一個(gè)JavaScript函數(shù)名為init,該函數(shù)調(diào)用活動(dòng)方式。

AndroidFunction.showToast(testVal);

AndroidFunction是同樣的名字,用來顯示JavaScript中的實(shí)例。我們已經(jīng)在addJavascriptInterface方式中給出該名字。

現(xiàn)在運(yùn)行你的app。

轉(zhuǎn)載于:https://www.cnblogs.com/elegant-dancer/p/3417431.html

總結(jié)

以上是生活随笔為你收集整理的Android:如何使用addJavaScriptInterface的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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