亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

基于Android中Webview使用自定義的javascript進行回調的問題詳解

2020-04-11 12:25:23
字體:
來源:轉載
供稿:網友

先說為什么需要討論這個問題。


現在很多的手機應用,都可能會直接嵌入一個web頁面。這樣做的好處:一個是功能更新方便,維護起來容易,只需要維護服務器的頁面即可,不需要更新客戶端;另一個是功能通用,不僅android可以用,ios也可以用,symbian也可以直接用。

那為什么現在很多手機應用并不做成web方式的呢?原因很多。一個是現階段web方式展現能力相對較弱,如果對于應用的美觀程度要求比較高,就無法使用web方式;一個是web方式速度相對較慢,用戶體驗會受一些影響;一個是現階段流量還是相對寶貴,web方式流量相對較大;還有一個就是有一些功能無法使用web方式實現(關于這一點,現在又很多開源的項目可以實現手機的一些硬件功能,比如拍照啊,獲取通訊錄啊,都是可以的,感興趣的可以搜索一下phoneGap。但是從現有的反饋來看,速度較慢,體驗較差)。

基于以上的原因,現在很多項目會把一部分功能做成web方式的,一部分功能用其它控件來寫。這就需要web頁面與其它控件做一些交互。如何交互呢,就是利用自定義的javascript。


下面虛擬一個場景。

現在有一個功能,展現當前用戶的好友列表,好友列表頁是web方式的,點擊某好友的頭像以后,進入該好友的詳情頁面,而這個頁面呢,由于某些原因,沒做成web方式的。

假設好友列表頁是UserListActivity,包含一個webview。好友詳情頁面是UserDetailActivity,包含很多控件和業務邏輯。

我們以id來唯一標示用戶。好友列表頁中,點擊每一個好友頭像,都會調用:

onclick="javascript:android.user('1')"

類似這樣的js語句。因本文主要介紹android,而不是web開發內容,所以具體不再詳述,熟悉web開發的同學很容易理解。

我們現在需要做的,就是顯示用戶列表頁面,然后在用戶點擊頭像以后,響應具體的js請求,跳到該好友詳細頁面。


下面看看大概的實現方法。

默認情況下,在WebView中是不能使用javascript的。可以通過下面的代碼:

復制代碼 代碼如下:

WebView myWebView = (WebView) findViewById(R.id.webview); 

WebSettings webSettings = myWebView.getSettings(); 

webSettings.setJavaScriptEnabled(true); 


使javascript功能可用。這部分代碼都放在UserListActivity中的onCreate()方法里。

然后是注冊JS接口。先看看webview的一個方法。

public void addJavascriptInterface (Object obj, String interfaceName)

Since: API Level 1

Use this function to bind an object to JavaScript so that the methods can be accessed from JavaScript.

IMPORTANT:

?         Using addJavascriptInterface() allows JavaScript to control your application. This can be a very useful feature or a dangerous security issue. When the HTML in the WebView is untrustworthy (for example, part or all of the HTML is provided by some person or process), then an attacker could inject HTML that will execute your code and possibly any code of the attacker's choosing.
Do not use addJavascriptInterface() unless all of the HTML in this WebView was written by you.

?         The Java object that is bound runs in another thread and not in the thread that it was constructed in.

Parameters

obj

The class instance to bind to JavaScript, null instances are ignored.

interfaceName

The name to used to expose the instance in JavaScript.

 

我們在UserListActivity類的onCreate()方法中增加如下語句:

mWebView.addJavascriptInterface(this, "android");

在UserListActivity類中增加如下方法:

public void user(String id) {

        // 獲取id,跳轉activity。

    }

 

這樣當頁面調用onclick="javascript:android.user('1')"語句的時候,就可以映射到UserListActivity對象的user()方法了。

這里user方法有一個參數,是要對應js語句的user(‘1')。

下面附上所有代碼。

Android部分的代碼:

復制代碼 代碼如下:

package com.arui.framework.android.js; 

 
import android.app.Activity; 

import android.content.Intent; 

import android.os.Bundle; 

import android.view.View; 

import android.webkit.WebSettings; 

import android.webkit.WebView; 

  

import com.arui.framework.R; 

import com.arui.framework.android.js.UserDetailActivity; 

  

public class UserListActivity extends Activity { 

  

    private WebView mWebView; 

     

    @Override 

    public void onCreate(Bundle savedInstanceState) { 

  

        super.onCreate(savedInstanceState); 

        

       setContentView(R.id.userlist); 

        

       mWebView = (WebView) findViewById(R.id.mywebview); 

       WebSettings webSetting = mWebView.getSettings(); 

       //設置js可用  

       webSetting.setJavaScriptEnabled(true); 

       // 添加js調用接口  

       mWebView.addJavascriptInterface(this, "android");  

       //載入具體的web地址  

       mWebView.loadUrl("http://VeVB.COm"); 

       mWebView.setVisibility(View.VISIBLE); 

       mWebView.requestFocus(); 

    } 

     

    public void user(String id) {  

       //跳轉activity  

       Intent intent = new Intent(this, UserDetailActivity.class); 

       intent.putExtra("id", id); 

       startActivity(intent); 

    }  


資源文件:

復制代碼 代碼如下:

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout  

    xmlns:android="http://schemas.android.com/apk/res/android" 

    android:orientation="vertical" 

    android:layout_width="fill_parent" 

    android:layout_height="fill_parent" > 

    <WebView 

       android:id="@+id/mywebview" 

       android:layout_width="fill_parent" 

       android:layout_height="fill_parent"  

       android:visibility="gone"/> 

</LinearLayout> 

Web頁面的局部代碼:

<img src="……" onclick="javascript:android.user('1')" />

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品一区二区三区在线播放| 亚洲成av人片在线观看香蕉| 国产精品视频白浆免费视频| 欧美日韩激情视频8区| 亚洲精品美女久久| 91网在线免费观看| 欧美最猛性xxxxx(亚洲精品)| 欧美精品video| 亚洲精品720p| 久久成人在线视频| 国产免费一区二区三区在线能观看| 98精品国产自产在线观看| 日韩久久免费视频| 另类视频在线观看| 欧美大荫蒂xxx| 中文字幕av一区中文字幕天堂| 亚洲理论在线a中文字幕| 亚洲最大福利视频| www.亚洲一二| 国产精品视频永久免费播放| 性欧美激情精品| 久久久久久久久久久av| 国产精品综合网站| 国产z一区二区三区| 日本高清不卡的在线| 国内精久久久久久久久久人| 日本欧美一级片| 亚洲成在人线av| 美女av一区二区三区| 精品国产鲁一鲁一区二区张丽| 久久久日本电影| 91久久精品国产91性色| 国产成人97精品免费看片| 亚洲第一区在线观看| 精品日本高清在线播放| 成人97在线观看视频| 国产视频精品va久久久久久| 欧美精品精品精品精品免费| 国产不卡视频在线| 45www国产精品网站| 国产精品久久久精品| 国产中文字幕亚洲| 欧美性极品xxxx娇小| 欧美富婆性猛交| 国色天香2019中文字幕在线观看| 亚洲第一精品久久忘忧草社区| 秋霞午夜一区二区| 国产97色在线|日韩| 国语自产精品视频在线看抢先版图片| 亚洲变态欧美另类捆绑| 国产精品啪视频| 日本19禁啪啪免费观看www| 日韩电影视频免费| 欧美视频在线免费看| 538国产精品一区二区在线| 在线观看国产欧美| 国产精品久久久久久av福利软件| 日韩欧美成人精品| 日韩女优人人人人射在线视频| 欧美日韩视频在线| 久久99精品久久久久久噜噜| 亚洲免费影视第一页| 久久伊人精品天天| 欧美日韩亚洲精品一区二区三区| 国产日本欧美一区二区三区| 欧美国产日韩一区| 91精品国产沙发| 久久成年人视频| www.欧美精品一二三区| 欧洲一区二区视频| 欧美大片在线免费观看| 欧美激情视频在线| 69精品小视频| 日韩在线中文视频| 国产视频精品一区二区三区| 日日狠狠久久偷偷四色综合免费| 色小说视频一区| 2019中文在线观看| 亚洲毛片在线观看.| 欧美国产精品va在线观看| 国产在线一区二区三区| 久久久亚洲影院| 美女福利视频一区| 欧美一区二区三区艳史| 亚洲乱码av中文一区二区| 久久影视三级福利片| 国产精品久久久久影院日本| 浅井舞香一区二区| 欧美又大又硬又粗bbbbb| 亚洲视频在线观看网站| 久热精品视频在线| 在线播放精品一区二区三区| 深夜成人在线观看| 亚洲精品99久久久久中文字幕| 国产一区二区三区视频在线观看| 成人a级免费视频| 中文字幕在线观看亚洲| 久久久亚洲影院你懂的| 91社区国产高清| 色婷婷av一区二区三区久久| 国产亚洲aⅴaaaaaa毛片| 中文字幕亚洲国产| 亚洲国产一区二区三区四区| 午夜精品福利视频| 麻豆成人在线看| 亚洲国产精品电影| 久久影院模特热| 欧美午夜激情小视频| 欧美成人免费播放| 日本一区二区三区四区视频| 一区二区三区视频在线| 久久成人国产精品| 日韩成人免费视频| 国产精品一区=区| 久久琪琪电影院| 国产97色在线|日韩| 国产日韩精品一区二区| 欧洲s码亚洲m码精品一区| 欧美性生交大片免网| 国产精品第七十二页| 久久久免费观看| 国外成人在线直播| 成人在线精品视频| 国产精品久久久久久网站| 综合av色偷偷网| 黄色成人av在线| 精品视频在线播放免| 97精品国产97久久久久久春色| 国产精品偷伦免费视频观看的| 国产精品观看在线亚洲人成网| 欧日韩不卡在线视频| 欧美性猛交xxxx乱大交极品| 亚洲国产精品久久久| 亚洲sss综合天堂久久| 国产一区视频在线| 亚洲欧洲高清在线| 国产成人鲁鲁免费视频a| 亚洲va男人天堂| 日韩精品视频在线免费观看| 538国产精品视频一区二区| 亚洲精品小视频| 国产xxx69麻豆国语对白| 2019日本中文字幕| wwwwwwww亚洲| 国产精品视频网址| 国产精品福利久久久| 亚洲欧洲美洲在线综合| 亚洲 日韩 国产第一| 国产精品久久久久久久久粉嫩av| 久久久影视精品| 国产一区二区黄| 色综合久久天天综线观看| 久久精品视频va| 国产精品久久久久久久av大片| 日韩av中文字幕在线免费观看| 大伊人狠狠躁夜夜躁av一区| 中文字幕亚洲精品| 一区二区三欧美| 日韩一级裸体免费视频| 中文字幕日韩av综合精品| 欧美日韩在线视频观看| 亚洲专区在线视频| 欧美wwwxxxx| 色偷偷噜噜噜亚洲男人的天堂|