android webview 篇

標(biāo)簽: android


使用場景

如果你想發(fā)布一個web application 作為你應(yīng)用客戶端的一部分脚粟,你可以使用webview來實(shí)現(xiàn)覆旱。webview 類是android view類的擴(kuò)展,它可以讓你顯示web頁面作為你Activity布局的一部分核无。webview不包含瀏覽器的完整特性扣唱,例如導(dǎo)航控制和地址欄。它僅僅是最基本的功能团南,就是展示web頁面噪沙。

當(dāng)你應(yīng)用的頁面需要及時的更新,例如給用戶提供的協(xié)議吐根,或者用戶指南正歼,這時使用webview作為你的應(yīng)用頁面是很合適的。在你的應(yīng)用里面拷橘,你可以創(chuàng)建一個包含webview的Activity局义,然后在線顯示文檔。

如何使用

  1. 添加一個webview 到你的application

    簡單的包含一個<WebView>元素到你的標(biāo)簽

<?xml version="1.0" encoding="utf-8"?>
<WebView  xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/webview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
/>
  1. 綁定webview冗疮,使用loadurl()
WebView myWebView = (WebView) findViewById(R.id.webview);
myWebView.loadUrl("http://www.example.com");
  1. 在它能工作之前你還必須聲明Intent權(quán)限
<manifest ... >
    <uses-permission android:name="android.permission.INTERNET" />
    ...
</manifest>

以上就是最基本的webview使用萄唇,是不是很簡單呢?

在你的webview中使用javaScript

如果在你加載的web頁面中需要使用JavaScript赌厅,那么你必須讓JavaScript能夠使用穷绵,一旦javaScript可以使用,你就可以在你的應(yīng)用代碼和JavaScript之間創(chuàng)建接口特愿。

如何啟用JavaScript
在默認(rèn)的情況下JavaScript是沒有啟用的仲墨。你可以通過連接這個webview的websetting來開啟它勾缭。你可以通過getSetting()方法獲取webseting,然后使用setJavaScriptEnable()方法來開啟它目养。

WebView myWebView = (WebView) findViewById(R.id.webview);
WebSettings webSettings = myWebView.getSettings();
webSettings.setJavaScriptEnabled(true);

當(dāng)然webSetting還提供了很多其他很有幫助的設(shè)置俩由,具體的內(nèi)容可以參考谷歌的官方api。

使你的JavaScript代碼和android的應(yīng)用代碼綁定
當(dāng)你在開發(fā)web應(yīng)用的使用癌蚁,你可能需要為你的應(yīng)用特別開發(fā)一個webview,你可以在JavaScript代碼和應(yīng)用客戶端之間創(chuàng)建接口幻梯,例如你可以創(chuàng)建JavaScript代碼調(diào)用android代碼你的方法去顯示一個dialog,而不是使用JavaScript的alert()的功能努释。
想要將JavaScript代碼和android代碼綁定碘梢,可以使用addJavasriptInterface()方法,通過這個類的實(shí)例就可以將JavaScript和接口名綁定伐蒂,然后JavaScript就可以調(diào)用這個類的方法煞躬。

/***
*這是JavaScript與android代碼綁定的實(shí)現(xiàn)類
*/
public class AppJavascriptInterface {
    Context mContext;

    /**初始化接口,設(shè)置上下文 */
    WebAppInterface(Context c) {
        mContext = c;
    }

    /**從web頁面中顯示一個toast*/
    @JavascriptInterface
    public void showToast(String toast) {
        Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
    }
}

注意:如果你的targetSdkVersion大于17的話逸邦,你必須在任何JavaScript可以獲取的方法前加上@JavascriptInterface注解恩沛,而且這個方法的訪問權(quán)限必須是public的。如果你不加注解缕减,可能在高于android4.2的手機(jī)中將無法獲取到接口方法雷客。

上面的AppJavascriptInterface類為web頁面創(chuàng)建了一個彈出Toast的方法。將這個類的實(shí)例綁定到運(yùn)行的webview上

WebView webView = (WebView) findViewById(R.id.webview);
webView.addJavascriptInterface(new AppJavascriptInterface(this), "Android");

在webview的javaScript低嗎中可以調(diào)用android來調(diào)用接口里的方法桥狡。

<input type="button" value="你好" onClick="showAndroidToast('你好')" />

<script type="text/javascript">
    function showAndroidToast(msg) {
        Android.showToast(msg);
    }
</script>

這里我們不需要在JavaScript中初始化android接口搅裙,webview會自動進(jìn)行。

注意:使用這種方式是一把雙刃劍总放,在極大方便了我們的同時呈宇,也不可避免的帶來了很多安全問題,應(yīng)以web頁面的內(nèi)容通常來自于外部局雄,是未知的,當(dāng)JavaScript代碼可以調(diào)用android內(nèi)部代碼的時候存炮,危險也就可能出現(xiàn)循集,所以我們應(yīng)當(dāng)盡可能的避免這種情況姻报,除非必須使用這種特性。同時我們也應(yīng)該不讓用戶導(dǎo)航到不是我們自己的頁面,當(dāng)超出頁面范圍的時候文留,可以使用外部的瀏覽器來時實(shí)現(xiàn),而不是我們內(nèi)置的webview舞终。

處理頁面導(dǎo)航

當(dāng)用用戶點(diǎn)擊webview中的一個連接的時候废膘,android系統(tǒng)默認(rèn)的處理方式時啟動一個新的應(yīng)用來處理這個連接。默認(rèn)情況下般又,android是打開一個瀏覽器來加載URL彼绷,然而你可以重寫webview這種行為方式巍佑,這樣連接就可以用內(nèi)置的webview打開,同時還能在你webview中的歷史記錄經(jīng)行前進(jìn)和后退導(dǎo)航寄悯。

打開用戶點(diǎn)擊的連接萤衰,可以提供一個為你的webview提供一個webviewClient

WebView myWebView = (WebView) findViewById(R.id.webview);
myWebView.setWebViewClient(new WebViewClient());

如果你想更多的控制連接加載,你可以創(chuàng)建自己的客戶端重寫shouldOverriderUrlLoad()的方法

private class MyWebViewClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
    //如果這是我們自己的站點(diǎn)域名不需要重寫
        if (Uri.parse(url).getHost().equals("www.example.com")) {
            return false;
        }
        // 不是自己的站點(diǎn)猜旬,啟動另一個應(yīng)用
        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
        startActivity(intent);
        return true;
    }
}

創(chuàng)建這個類的實(shí)例

WebView myWebView = (WebView) findViewById(R.id.webview);
myWebView.setWebViewClient(new MyWebViewClient());

導(dǎo)航歷史記錄界面
當(dāng)你的webview覆寫URL加載時他將自動累計(jì)URL訪問的歷史記錄頁面你可以通過goBack()goForward()方法脆栋。

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    // 當(dāng)返回動作執(zhí)行的時候,監(jiān)聽是否有可返回的歷史記錄
    if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.canGoBack()) {
        myWebView.goBack();
        return true;
    }
   //沒有歷史記錄頁面返回洒擦,屬于系統(tǒng)正常退出
    return super.onKeyDown(keyCode, event);
}

如果有歷史記錄存在椿争,則canGoBack()方法返回true,同樣canGoForward()也是如此熟嫩,一旦用戶到達(dá)了歷史記錄的末尾丘薛,再次調(diào)用goBack()或者goForward(),它將什么事也不做。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末邦危,一起剝皮案震驚了整個濱河市洋侨,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌倦蚪,老刑警劉巖希坚,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異陵且,居然都是意外死亡裁僧,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進(jìn)店門慕购,熙熙樓的掌柜王于貴愁眉苦臉地迎上來聊疲,“玉大人,你說我怎么就攤上這事沪悲』裰蓿” “怎么了?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵殿如,是天一觀的道長贡珊。 經(jīng)常有香客問我,道長涉馁,這世上最難降的妖魔是什么门岔? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮烤送,結(jié)果婚禮上寒随,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好妻往,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布互艾。 她就那樣靜靜地躺著,像睡著了一般蒲讯。 火紅的嫁衣襯著肌膚如雪忘朝。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天判帮,我揣著相機(jī)與錄音局嘁,去河邊找鬼。 笑死晦墙,一個胖子當(dāng)著我的面吹牛悦昵,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播晌畅,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼但指,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了抗楔?” 一聲冷哼從身側(cè)響起棋凳,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎连躏,沒想到半個月后剩岳,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡入热,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年拍棕,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片勺良。...
    茶點(diǎn)故事閱讀 40,664評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡绰播,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出尚困,到底是詐尸還是另有隱情蠢箩,我是刑警寧澤,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布尾组,位于F島的核電站忙芒,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏讳侨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一奏属、第九天 我趴在偏房一處隱蔽的房頂上張望跨跨。 院中可真熱鬧,春花似錦、人聲如沸勇婴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽耕渴。三九已至拘悦,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間橱脸,已是汗流浹背础米。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留添诉,地道東北人屁桑。 一個月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓,卻偏偏與公主長得像栏赴,于是被迫代替她去往敵國和親蘑斧。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評論 2 359

推薦閱讀更多精彩內(nèi)容