1. 程式人生 > >Android中呼叫js方法及js中呼叫本地方法

Android中呼叫js方法及js中呼叫本地方法

Android中內建了WebKit模組,而該模組的Java層檢視類就是WebView,所有需要使用Web瀏覽器功能的Android都需要建立該檢視類物件顯示和處理請求的網路資源。目前WebKit支援Http、Https、Ftp和JavaScript請求。下面我們重點看一下如何在Android中呼叫JavaScript方法以及如何在js中呼叫本地方法。

1、在Assets下放一個簡單的html檔案jstest.html

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html40/strict.dtd">
<HTML>
<HEAD>
<meta name="viewport" content="width=device-width, target-densitydpi=device-dpi" />
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script>
   function showMsg(){
      alert("hello world!");
   }
   function showMsgInAndroid(){
      myjs.showMsg('hello in android!');
   }
</script>
</HEAD>
<BODY>
<span>測試js使用</span>

<button id='btntest' onclick='showMsgInAndroid()'>呼叫android方法</button>
</BODY>
</HTML>

2、佈局檔案main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
	android:id="@+id/rl_main"
	android:layout_width="fill_parent"
	android:layout_height="fill_parent"
	xmlns:android="http://schemas.android.com/apk/res/android"
    >
   <WebView 
       android:id="@+id/wv_test"
       android:layout_width="fill_parent"
       android:layout_height="fill_parent"
       android:layout_above="@+id/btn_showmsg"/>
   <Button 
       android:id="@+id/btn_showmsg"
       android:layout_width="200dip"
       android:layout_height="40dip"
       android:layout_alignParentBottom="true"
       android:layout_centerHorizontal="true"
       android:text="呼叫html中js方法"/>
</RelativeLayout>

3、然後是Activity,MainActivity.java
package com.harold.jstest;

import com.harold.base.JSKit;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.View.OnClickListener;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.widget.Button;

public class MainActivity extends Activity {
	
	private WebView mWebView;
	private Button btnShowInfo;
	private JSKit js;
	private Handler mHandler = new Handler();

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		//初始化控制元件
		mWebView = (WebView) findViewById(R.id.wv_test);
		btnShowInfo = (Button) findViewById(R.id.btn_showmsg);
		//例項化js物件
		js = new JSKit(this);
		//設定引數
		mWebView.getSettings().setBuiltInZoomControls(true);
		//內容的渲染需要webviewChromClient去實現,設定webviewChromClient基類,解決js中alert不彈出的問題和其他內容渲染問題
		mWebView.setWebChromeClient(new WebChromeClient());
		mWebView.getSettings().setJavaScriptEnabled(true);
		//把js繫結到全域性的myjs上,myjs的作用域是全域性的,初始化後可隨處使用
		mWebView.addJavascriptInterface(js, "myjs");
		
		mWebView.loadUrl("file:///android_asset/jstest.html");
		
		btnShowInfo.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				mHandler.post(new Runnable() {
					@Override
					public void run() {
						//呼叫 HTML 中的javaScript 函式
						mWebView.loadUrl("javascript:showMsg()");
					}
				});
			}
		});
	}

}

4、最後是繫結全域性js的類JSKit.java
package com.harold.base;

import android.widget.Toast;

import com.harold.jstest.MainActivity;

public class JSKit {
	private MainActivity ma;
	
	public JSKit(MainActivity context) {
		this.ma = context;
	}
	
	public void showMsg(String msg) {
		Toast.makeText(ma, msg, Toast.LENGTH_SHORT).show();
	}
}

例子比較簡單,程式碼裡都加了註釋,這裡就不多說了,本示例用的本地的html,如果訪問網路中的網頁,別忘記在AndroidManifest.xml中加許可權
<uses-permission android:name="android.permission.INTERNET"/>
原始碼在下面:

相關推薦

Android呼叫js方法js呼叫本地方法

Android中內建了WebKit模組,而該模組的Java層檢視類就是WebView,所有需要使用Web瀏覽器功能的Android都需要建立該檢視類物件顯示和處理請求的網路資源。目前WebKit支援Http、Https、Ftp和JavaScript請求。下面我們重點看一下如

DelphiWebBrowser判斷頁面JS ajax是否載入完成-轉

在一個程式中需要判斷WebBrowser開啟的頁面是否載入完成,通常的做完是使用Busy屬性,程式碼如下: while WebBrowser1.Busy do Application.ProcessMessages; 對於多框架: procedure TForm1.WebBrowser1Na

支援android&ios高度自適應JS相互呼叫的元件react-native-webview2

本專案是WebView 或 Web 元件,支援Android、iOS, 支援auto height高度自適應及在html頁面和RN元件之間call js相互呼叫js方法,very useful &a

linux伺服器不支援soapbcmul函式的結局方法

新的程式裡用了webserice介面,部到伺服器,先是提示:bcmul() 函式不可用,網上搜索一番,得知這是php的高精度函式,需要在編譯php的時候加入此模組,於是在編譯腳本里增添 “–enable-bcmath” 後重新編譯、重啟apache然後此錯誤解決; 然後有遇到報錯“Class ‘SoapCl

建立表、修改表、刪除表的方法 ,建立主鍵約束、外來鍵約束、使用者自定義約束的方法 ,建立查詢表的方法使用截斷表的方法,理解約束在資料庫的作用

撰寫人——軟工二班——陳喜平 – 實驗內容: – 一、建立表 – 建立圖書館管理系統所涉及的表 – 建立產品銷售系統所涉及的表 – 圖書表book(bid,bname,price,qty) – 書庫表lib(lid,lname,address) – 讀者表reader

較常用的Math方法ES6的擴充套件

記錄下與Math有關的常用方法,如:求最大值、最小值等,或者是保留幾位數啥的 1.資料 let floatA = 2.325232; let floatB = 2.3456; let temporaryArray = [1, 2, 5, 6, 3]; let minusNu

pycharm 永久破解方法Ubuntu桌面快捷方式設定

1、下載 https://pan.baidu.com/s/119UO4SGIEW_cxf0LmZzx3w 並將 JetbrainsCrack-3.1-release-enc.jar 放置到 pycharm安裝目錄的\bin目錄下(位置可隨意,只要配置檔案填寫相對

Delphi 自定義異常異常處理的一般方法

   delphi中異常定義如下: TCustomException   =   class(Exception)     private     public         constructor   Create(const   Msg:   string );

JavaScript給按鈕繫結點選事件(onclick)的方法js常見事件

本文例項講述了JavaScript給按鈕繫結點選事件(onclick)的方法。分享給大家供大家參考。具體分析如下: 我們可以通過設定按鈕的onclick屬性來給按鈕繫結onclick事件 <!DOCTYPE html> <html>

[圖形學]VS2017OpenGL的下載安裝的異常

1、放dll檔案:C:\Windows\SysWOW64 或C:\Windows\windows32 2、lib和h:C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\ lib放在lib資料夾下。

二十種特徵變換方法Spark MLlib呼叫例項(Scala/Java/python)(一)

Tokenizer(分詞器) 演算法介紹:         Tokenization將文字劃分為獨立個體(通常為單詞)。下面的例子展示瞭如何把句子劃分為單詞。         RegexTokenizer基於正則表示式提供更多的劃分選項。預設情況下,引數“pattern”為

三種特徵選擇方法Spark MLlib呼叫例項(Scala/Java/python)

VectorSlicer 演算法介紹:         VectorSlicer是一個轉換器輸入特徵向量,輸出原始特徵向量子集。VectorSlicer接收帶有特定索引的向量列,通過對這些索引的值進行篩選得到新的向量集。可接受如下兩種索引 1.整數索引,setIndice

二十種特徵變換方法Spark MLlib呼叫例項(Scala/Java/python)(二)

VectorIndexer 演算法介紹:         VectorIndexer解決資料集中的類別特徵Vector。它可以自動識別哪些特徵是類別型的,並且將原始值轉換為類別指標。它的處理流程如下: 1.獲得一個向量型別的輸入以及maxCategories引數。 2.基於

Android高階】檢視手機應用記憶體狀況的方法

我 們知道,android程式記憶體一般限制在16M,當然也有24M的,而android程式記憶體被分為2部分:native和dalvik,dalvik 就是我們平常說的java堆,我們建立的物件是在這裡面分配的,而bitmap是直接在native上分配的,對於記憶體的限制

Python缺失值分類Pandas缺失資料處理函式

一、Python中缺失值分類 Python中有三種缺失值(空值): 形式 含義 None Python內建的None值,如建立一個空的列表list=[] NA 在pandas中,將缺失值表示為NA,表示不可用not available,主

DOM的事件型別HTML5的事件型別

DOM中事件型別有: UI(使用者介面)事件,使用者與頁面上元素互動時觸發 ; 焦點事件:當元素獲得或失去焦點時觸發;  滑鼠事件:當用戶通過滑鼠在頁面上執行操作時觸發; 滾輪事件:當使用滑鼠

[android ndk]android studio動態庫生成jni底層呼叫步驟

android studio動態庫生成及jni底層呼叫步驟 1、建立一個用於關聯c程式碼的類(對映類) 方法名需要加native修飾 public class NDKUtils { public static native int getSum

vue跨域解決方法 設置api路徑方法

fun tab cti query 跨域請求 geo var nco target vue項目中,前端與後臺進行數據請求或者提交的時候,如果後臺沒有設置跨域,前端本地調試代碼的時候就會報“No ‘Access-Control-Allow-Origin‘ header is

Linux:VMware Tools安裝方法共享資料夾設定方法

正確安裝好VMware Tools後,可以實現主機與虛擬機器之間的檔案共享, 可以設定共享資料夾,以及在主機與虛擬機器之間直接進行復制黏貼的操作。 安裝方法: 選擇"虛擬機器"—>"重新安裝VMware Tools" 彈出以下介面: 滑鼠右

VMware Tools安裝方法共享資料夾設定方法

正確安裝好VMware Tools後,可以實現主機與虛擬機器之間的檔案共享, 可以設定共享資料夾,以及在主機與虛擬機器之間直接進行復制黏貼的操作。 安裝方法: 選擇"虛擬機器"—>"重新安裝VMware Tools" 彈出以下介面: 滑鼠右鍵點選V