• <kbd id="qyk40"></kbd>
  • <strike id="qyk40"></strike><samp id="qyk40"><pre id="qyk40"></pre></samp>

    在 Android 手機中內(nèi)置了一款高性能 webkit 內(nèi)核瀏覽器, SDK 中封裝為一個叫做 WebView 組件。
    WebView 類是 WebKit 模塊 Java 層的視圖類,( 所有需要使用 Web 瀏覽功能的Android應(yīng)用程序都要創(chuàng)建該視圖對象顯示和處理請求的網(wǎng)絡(luò)資源。目前,WebKit 模塊支持 HTTP、HTTPS、FTP 以及 javascript 請求。

    WebView 作為應(yīng)用程序的 UI 接口,為用戶提供了一系 列的網(wǎng)頁瀏覽、用戶交互接口,客戶程序通過這些接口訪問 WebKit 核心代碼。 )

    什么是 webkit
    WebKit 是 Mac OS X v10.3 及以上版本所包含的軟件框架(對 v10.2.7 及以上版本也可通過 軟件更新獲?。?同時,
    WebKit 也是 Mac OS X 的 Safari 網(wǎng)頁瀏覽器的基礎(chǔ)。WebKit 是一個開源項目,主要由 KDE 的 KHTML 修改而來并且包含了一些來自蘋果公司的一些組件。
    傳統(tǒng)上, WebKit 包含一個網(wǎng)頁引擎 WebCore 和一個腳本引擎 JavaScriptCore,它們分別對應(yīng) 的是 KDE 的 KHTML 和 KJS。
    不過,隨著 JavaScript 引擎的獨立性越來越強,現(xiàn)在 WebKit 和 WebCore 已經(jīng)基本上混用不分(例如 Google Chrome 和 Maxthon 3 采用 V8引擎,卻仍然 宣稱自己是 WebKit 內(nèi)核) 。
    這里我們初步體驗一下在 android 是使用 webview 瀏覽網(wǎng)頁,
    SDK 的 Dev Guide 中有一個 在 WebView 的簡單例子 。 在開發(fā)過程中應(yīng)該注意幾點: 1.AndroidManifest.xml 中必須使用許可"android.permission.INTERNET",否則會出 Web page not available 錯誤。

    2.如果訪問的頁面中有 Javascript,則 webview 必須設(shè)置支持 Javascript。 webview.getSettings().setJavaScriptEnabled(true);
    3.如果頁面中鏈接, 如果希望點擊鏈接繼續(xù)在當前 browser 中響應(yīng), 而不是新開 Android 的系統(tǒng)browser 中響應(yīng)該鏈接,必須覆蓋 webview 的 WebViewClient 對象。

    mWebView.setWebViewClient(new WebViewClient(){ public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } }); 
    
    mWebView.setWebViewClient(new WebViewClient(){ public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } }); 
    


    4.如果不做任何處理,瀏覽網(wǎng)頁,點擊系統(tǒng)“Back”鍵,整個 Browser 會調(diào)用 finish()而結(jié)束自身,
      如果希望瀏覽的網(wǎng) 頁回退而不是推出瀏覽器,需要在當前 Activity 中處理并消費 掉該 Back 事件。

    public boolean onKeyDown(int keyCode, KeyEvent event){        <br> if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {
                    mWebView.goBack();
                     return true;
            }
            return super.onKeyDown(keyCode, event);
    }

     ==========================================================================
    在tomcat上放一個漂亮頁面

    1.加載網(wǎng)頁(加權(quán)限)
    定義一個網(wǎng)址輸入文本框,點按鈕用webView打開這個網(wǎng)頁
    2.編寫data字符串,webview.loadData(data,"text/html","UTF-8");
    3.用dialog的setiem打開網(wǎng)址,前進,后退,放大,縮小,清歷史。
    4.用HTML定義開發(fā)界面。file:/android_asset/a.html

    復(fù)制代碼

    <script>
     function loadurl(){        }< /script>
    < select name="">
      <option value=""/>
      <option value=""/>
    < /select>webview.getSettings().setJavaScriptEnabled(true);
    webview.getSettings().setBuiltInZoomControls(true);
    webview.loadUrl(file:///...);
    

    復(fù)制代碼


    5.js對話框(用chom..)

    復(fù)制代碼

    function openAlert(){
      window.alert("");
    }
    
    function openConfirm(){  if(window.confirm("是否刪除此信息?")){
              window.location="myjs.html";//-------------------!!!  }
    }<input type="submit" value="警告" onClick="openAlert()">
    < input type="submit" value="確認" onClick="openConfirm()">
    

    復(fù)制代碼

    -----------------------------------------------------
    java調(diào)js中的方法:
    //在java中調(diào)用javascript方法要通過loadUrl()來進行,把要調(diào)用的方法作為loadUrl方法的字符串參數(shù)

    settings.setJavaScriptEnabled(true);//設(shè)置在webview中可用js
     webview.loadUrl("javascript:myprompt1()");
    

    javascript中調(diào)java中的方法:(特別強調(diào)要用Android2.2版模擬器)

    -------------java中:------

    復(fù)制代碼

    webview.addJavascriptInterface(new MyInterface(), "myobj");//第二步---注冊在js中調(diào)用的對象名myobj         
             webview.loadUrl("file:///android_asset/test.html");
     //第一步:定義要在js中調(diào)用的方法
        class MyInterface{
                       public String getname(){
                                return "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
                }
        }

    復(fù)制代碼

    ------------javascript中:-----

    function myinterface(){
                     document.getElementById("myname").innerHTML = window.myobj.getname() ;
             }
    

    ------------------------------------------------------------------
    WebView控件功能強大,除了具有一般View的屬性和設(shè)置外,還可以對url請求、頁面加載、渲染、頁面交互進行強大的處理。
    WebView有幾個可以定制的點:
    (1) 設(shè)置WebChromeClient子類,WebChromeClient會在一些影響瀏覽器ui交互動作發(fā)生時被調(diào)用,比如WebView關(guān)閉和隱藏、 頁面加載進展、js確認框和警告框、js加載前、js操作超時、webView獲得焦點等等,詳見WebChromeClient

    (2) 設(shè)置WebViewClient子類,WebViewClient會在一些影響內(nèi)容喧嚷的動作發(fā)生時被調(diào)用,比如表單的錯誤提交需要重新提交、頁面開始加 載及加載完成、資源加載中、接收到http認證需要處理、頁面鍵盤響應(yīng)、頁面中的url打開處理等等,詳見WebViewClient

    (3) 設(shè)置WebSettings類,其中包含多項配置。WebSettings用來對WebView的配置進行配置和管理,比如是否可以進行文件操作、緩存的 設(shè)置、頁面是否支持放大和縮小、是否允許使用數(shù)據(jù)庫api、字體及文字編碼設(shè)置、是否允許js腳本運行、是否允許圖片自動加載、是否允許數(shù)據(jù)及密碼保存等 等,詳見WebSettings

    (4)設(shè)置addJavascriptInterface方法,將java對象綁定到webView中, 以方便從頁面js中控制java對象, 實現(xiàn)用本地java代碼和html頁面進行交互,甚至可以進行頁面自動化。但如此做存在安全隱患,所以若設(shè)置了此方法,請確保webView的代碼都是自 己完成,詳細使用addJavascriptInterface進行自動化見本文5使用addJavascriptInterface完成和js交互

    1、back鍵控制網(wǎng)頁后退
    Activity默認的back鍵處理為結(jié)束當前Activity,webView查看了很多網(wǎng)頁后,希望按back鍵返回上一次瀏覽的頁面,這個時候我們就需要覆蓋onKeyDown函數(shù),告訴他如何處理,如下:

    復(fù)制代碼

    public  boolean onKeyDown(int keyCode, KeyEvent event) {  
             if (webView.canGoBack() && event.getKeyCode() == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {  
                 webView.goBack();  
                 return    true;  
             }  
             return    super.onKeyDown(keyCode, event);  
         }  
     
    

    復(fù)制代碼

    其中webView.canGoBack()在webView含有一個可后退的瀏覽記錄時返回true
    webView.goBack();表示返回webView的上次訪問頁面
    WebView(網(wǎng)絡(luò)視圖)能加載顯示網(wǎng)頁,可以將其視為一個瀏覽器。

    網(wǎng)絡(luò)內(nèi)容:
    1、LoadUrl直接顯示網(wǎng)頁內(nèi)容(單獨顯示網(wǎng)絡(luò)圖片)

    2、LoadData顯示中文網(wǎng)頁內(nèi)容(含空格的處理)

    APK包內(nèi)文件:
    1、LoadUrl顯示APK中Html和圖片文件

    2、LoadData(loadDataWithBaseURL)顯示APK中圖片和文字混合的Html內(nèi)容res/layout/main.xml
    ----------------------------------------------------------
    當運行提示為web page not available時去清單文件中添加權(quán)限
    <uses-permission android:name="android.permission.INTERNET"/>
    URLUtil.isNetworkUrl(String uri)方法用來判斷用戶輸入的URL是否有效,如無效則會顯示一個Toast信息框來提醒用戶輸入正確的URL

    ----------------------------------------------------------
    步驟:
    1、在布局文件中聲明WebView
    2、在Activity中實例化WebView
    3、調(diào)用WebView的loadUrl( )方法,設(shè)置WevView要顯示的網(wǎng)頁
    4、為了讓WebView能夠響應(yīng)超鏈接功能,調(diào)用setWebViewClient( )方法,設(shè)置  WebView視圖
    5、用WebView點鏈接看了很多頁以后為了讓WebView支持回退功能,需要覆蓋覆蓋Activity類的onKeyDown()方法,如果不做任何處理,點擊系統(tǒng)回退鍵,整個瀏覽器會調(diào)用finish()而結(jié)束自身,而不是回退到上一頁面
    6、需要在AndroidManifest.xml文件中添加權(quán)限,否則出現(xiàn)Web page not available錯誤。

    <uses-permission android:name="android.permission.INTERNET"/>
    下面是具體的例子:

    MainActivity.java

    View Code

    main.xml

    View Code

    =======================================================
    webview學習記錄總結(jié):

    首先要在 manifest.main 文件中創(chuàng)建一個 webview,
    然后再 activity 中定義這個 webview 然后 進行以下相關(guān)操作。
    1、添加權(quán)限:AndroidManifest.xml 中必須使用許可"android.permission.INTERNET",否則會出 Web page not available 錯誤。
    2、在要Activity 中生成一個 WebView 組件:WebView webView = new WebView(this);
    3、設(shè)置WebView 基本信息:
    如果訪問的頁面中有 Javascript,則 webview 必須設(shè)置支持 Javascript。
    webview.getSettings().setJavaScriptEnabled(true);
    觸摸焦點起作用 requestFocus(); 取消滾動條 this.setScrollBarStyle(SCROLLBARS_OUTSIDE_OVERLAY);
    4 如果希望點擊鏈接由自己處理,而不是新開 Android 的系統(tǒng) browser 中響應(yīng)該鏈接。
    給 WebView添加一個事件監(jiān)聽對象( WebViewClient)并重寫其中的一些方法:
    shouldOverrideUrlLoading:對網(wǎng)頁中超鏈接按鈕的響應(yīng)。當按下某個連接時 WebViewClient會調(diào)用這個方法,
    并傳遞參數(shù):按下的 url onLoadResource onPageStart onPageFinish onReceiveError onReceivedHttpAuthRequest

    5、如果訪問的頁面中有 Javascript,則 webview 必須設(shè)置支持 Javascript ,否則顯示空白頁面。
    Java 代碼 webview.getSettings().setJavaScriptEnabled(true);

    6、 如果頁面中鏈接,如果希望點擊鏈接繼續(xù)在當前 browser 中響應(yīng),而不是新開 Android 的系統(tǒng) browser 中響應(yīng)該鏈接,必須覆蓋 webview 的 WebViewClient 對象: Java 代碼 1.mWebView.setWebViewClient(new WebViewClient(){ 2. 3. 4. 5. 6. });
    上述方法告訴系統(tǒng)由我這個 WebViewClient 處理這個 Intent,我來加載 URL。 點擊一個鏈接的 Intent 是向上冒泡的,
    shouldOverrideUrlLoading 方法 return true 表示我加載后這個 Intent 就消費了, 不再向上冒泡了。

    7、 如果不做任何處理, 在顯示你的 Brower UI 時, 點擊系統(tǒng)“Back”鍵, 整個 Browser 會作為一個整體“Back" }
    public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true;
    到其他 Activity 中,而不是希望的在 Browser 的歷史頁面中 Back。

     

    穩(wěn)定

    產(chǎn)品高可用性高并發(fā)

    貼心

    項目群及時溝通

    專業(yè)

    產(chǎn)品經(jīng)理1v1支持

    快速

    MVP模式小步快跑

    承諾

    我們選擇聲譽

    堅持

    10年專注高端品質(zhì)開發(fā)
    • 返回頂部
    日韩免费高清大片在线| 国产精品女主播自在线拍| 久久精品国产99久久丝袜| 无码中文字幕日韩专区视频| 欧洲精品一区二区三区| 亚洲综合精品第一页| 精品人妻AV一区二区三区| 久久久久久亚洲Av无码精品专口| 久久亚洲国产欧洲精品一| 538精品在线观看| 久久青青成人亚洲精品| 99re国产精品视频首页| 国产精品gz久久久| 亚洲国产成人乱码精品女人久久久不卡 | 日韩中文字幕免费视频| 国产精品久久二区二区| 国产精品成年片在线观看| 精品极品三级久久久久| 性欧洲精品videos| 免费精品一区二区三区第35 | 亚洲AV无码久久精品狠狠爱浪潮| 99久久99这里只有免费的精品| 精品国产亚洲一区二区在线观看| 人妻少妇看A偷人无码精品视频| 久久久国产精品四虎| 2022国产成人福利精品视频| 3d动漫精品啪啪一区二区中| 久久亚洲AV无码精品色午夜麻豆| 久久精品国产亚洲AV香蕉| 久久精品人人槡人妻人人玩AV | 国产精品素人搭讪在线播放| 亚洲国产成人91精品| 精品久久久久久久久午夜福利| 91麻豆精品一二三区在线| 亚洲精品在线播放| 亚洲宅男精品一区在线观看| 国产精品国产三级国产专播| 九九精品视频在线观看| 国产精品无码无卡在线观看久| 精品伊人久久大线蕉地址| 国产精品免费视频一区|