1. 程式人生 > >Android錯誤集錦之WebView

Android錯誤集錦之WebView

開發中總是遇到各種奇葩的錯誤,做一個錯誤收集集合

WebView 錯誤集合

1.跨域問題:做webapp的時候,寫js會碰到 XMLHttpRequest cannot load http://abc Origin http://def  is not allowed by Access-Control-Allow-Origi 跨域問題:

解決方案參考地址:方案一方案二

解決方案:思路:訪問android WebView private 物件 WebViewCore mWebViewCore,呼叫 mWebViewCore的private 方法nativeRegisterURLSchemeAsLocal,把http和https忽悠成本地訪問。 XMLHttpRequest即可自由跨域。

注:android 4.1煎餅以上還需要設定WebSettings.setAllowUniversalAccessFromFileURLs(true) 

2.字元問題: 由於加多了引號導致 [INFO:CONSOLE(1)] "Uncaught SyntaxError: missing ) after argument list", source:  (1)

解決方案參考地址: 參考一 參考二

解決方案:

JSONObject jsonObject = new JSONObject();
jsonObject.put("si", "dfasfsa");
jsonObject.put("url", "http://xxxx");
String xx = jsonObject.toString();//toUtf8(js);
//String xxs = "javascript:initializeAsyn_app(\"" + xx + "\")";//這個是錯誤的
String xxs = "javascript:initializeAsyn_app(" + xx + ")";//這個是正確的  initializeAsyn_app html的方法名稱
webView.loadUrl(xxs);

String content = "9880";
webView.loadUrl("javascript:alertMessage(\"" + content + "\")");//這個是一般String的寫法

3.webView呼叫js方法問題:webView沒有載入完畢呼叫html中的js方法報錯:Uncaught ReferenceError: is not define或者has no method

解決方案參考地址:地址一 

解決方案:

我們在 onPageFinished的時候,全部的js肯定都載入完畢了,這時候再執行loadUrl方法,就可以啦

 private class WebViewClientDemo extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            Log.d(TAG, " url:"+url);


            view.loadUrl(url);// 當開啟新連結時,使用當前的 WebView,不會使用系統其他瀏覽器
            return true;
        }

        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
            //在這裡執行你想呼叫的js函式
            if(!flag_get_deviceid){
                loadUrl();
            }
        }
    }


順便提一下 webview.evaluateJavascript的好處,這個方法,可以把js函式的return結果獲取到:
兩種webWiew呼叫js的方法,第1種: mWebview.loadUrl("javascript:getDeviceID('maomao')");                                                            第2種if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
        String script=String.format("javascript:getDeviceID('"+androidID+"')");
        webView.evaluateJavascript(script, new ValueCallback<String>() {
            @Override
            public void onReceiveValue(String value) {
                Log.d("onReceiveValue", "onReceiveValue value=" + value);
            }});
    }

相關推薦

Android錯誤集錦WebView

開發中總是遇到各種奇葩的錯誤,做一個錯誤收集集合WebView 錯誤集合1.跨域問題:做webapp的時候,寫js會碰到 XMLHttpRequest cannot load http://abc Or

Android問題集錦八:呼叫其他程式中的activity和Permission Denial: starting Intent 錯誤解決辦法

今天想除錯多個task中棧的情況,在測試程式中呼叫另一個程式的activity,程式碼片段如下: btnStartX=(Button)findViewById(R.id.btnStartX); btnStartX.setOnClickListen

Android面試集錦Activity(知識整理)

面試集錦是參考了慕課網BAT某大神的視訊。 本文分為四個部分: 1.Activity生命週期 2.Activity任務棧 3.Activity啟動模式 4.scheme跳轉協議 一、Activity的生命週期 什麼是Activity? android與使用者進行互動的時候,

Android面試集錦Service(知識整理)

本文主要講解兩個部分: 一、service的應用場景,以及和Thread的區別 二、開啟service的兩種方式以及區別 第一部分又可以分為: Service基礎: 1.Service是什麼? Service是一種可以在後臺執行長時間執行操作而沒有使用者介面的應用元件。 可

Android面試集錦Fragment(知識整理)

一、Fragment為什麼被稱為第五大元件 使用頻率高,ui切換效果好,更節省記憶體,因為其有自己的生命週期,所以也算不到四大元件裡取;fragment必須依附於activity存在。 二、Fragment載入到activity中的兩個方式 靜態載入,動態載入,(太基礎了不說了) 三

Android問題集錦八 呼叫其他程式中的activity和Permission Denial starting I

                今天想除錯多個task中棧的情況,在測試程式中呼叫另一個程式的activity,程式碼片段如下:        btnStartX=(Button)findViewById(R.id.btnStartX);        btnStartX.setOnClickListener

Android問題集錦三十二 Failure INSTALL FAILED NO MATCHING ABIS

                     這個問題出現在模擬器上的概率更大些,原因是某些應用使用了原生庫(NDK,Native Lib),這些庫的編譯目標通常是arm架構的cpu,在x86上執行就會報這樣的錯誤。 比如我看了一下報錯的應用,果然有很多so在lib下。$ ls lib/armeabi/libap

Oracle 11g RAC 錯誤集錦---VIP 故障

Oracle 11g RAC 錯誤集錦之---VIP 故障故障現象:Oracle RAC VIP 故障系統環境: 作業系統:Redhat EL55 叢集軟體:CRS 11G 資料庫軟體:Oracle 1

android記憶體優化webview

在混合型app中它是主角,一切由它呈現,如58同城,趕集網等;在另一些超級app中亦有它的影子,微信,qq,支付寶,沒有一個超級app能少了它,既能展示最新最潮的實時資訊,又能扮演盤踞一方的全功能型網站,與native結合後又能扮演諸如公眾號之內的應用等等,其能力可想而知。webview在android端的演

Android問題集錦二十八:You need to use a Theme.AppCompat theme (or descendant) with this activity.

錯誤描述為:java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.起因:我想在Manifest中設定我的activ

Android問題集錦五十:not attached to window manager

not attached to window manager有許多場景發生,下面說下Dialog的dismiss引發的崩潰。 場景復現: 1、非同步任務或其他後臺執行緒操作,介面顯示滾動條。 兩個Tab頁快速點選切換,有一定機率出現上述問題引起的崩潰。

Android控制元件WebView(網頁調轉回APP)

問題來源:網頁跳轉回應用 APP開啟網頁,網頁放置在伺服器中(例如,APP開啟百度網頁),開啟網頁之後在某一時刻需要從網頁在跳轉回到APP。 實現原理:使用URI再加上Intent來實現。 URI介紹: 就Android平臺而言,URI主要分三個部分:s

Eclipse除錯Android工具集錦二-DDMS

本文章的前提:已經安裝了Eclipse和ADT。android SDK也下載完畢。Eclipse裡面已經設定好了andro本文章的前id SDK。 本文章將系統的介紹Android除錯的各個工具。講的會比較細,希望對大家有所幫助。 DDMS Android SDK單獨

android軟體開發webView.addJavascriptInterface迴圈漸進【一】

程式碼 由於這裡是第一階段的webView所我就寫個最簡單的文章,這樣大家可以迴圈漸進的來了解addJavascriptInterface這句話是怎麼用的。 在這裡我們引用Google的一個事例下面是我Google給提供的一個dome的地址:點選開啟連結 我們先看它的HTM

Android安全開發WebView中的大坑

0X01 About WebView      在Android開發中,經常會使用WebView來實現WEB頁面的展示,在Activiry中啟動自己的瀏覽器,或者簡單的展示一些線上內容等。WebView功能強大,應用廣泛,但它是天使與惡魔的合體,一方面它增強了APP的上

Android 錯誤集錦及解決方案

找到一篇好的錯誤總結哈。這麼多已經很不錯了。只可惜我現在出的錯,沒有在這裡找到,不過還是很不錯哦 【錯誤資訊】 [2011-01-19 16:39:10 - ApiDemos] WARNING: Application does not specify an API

Android控制元件WebView(基礎知識)

1. 常用設定 1.1 開啟網頁時不呼叫系統瀏覽器,而是在WebView中顯示。 WebView如果不設定setWebViewClient(),網頁在系統系統瀏覽器中開啟,如果設定則在WebView中顯示,同時還可以自定義WebViewClient。

Android混合開發——WebView頁面棧遇上重定向

場景:我們的現在開發的App基本都會嵌入一些網頁是內容更加的豐滿。我們在網頁展示頁面想點選返回鍵退出到前一個頁面。當退出到最開始的頁面的時候直接退出當前的Activity。通常的做法是,監聽返回鍵,判斷頁面棧是否可以回退。 @Override

Android問題集錦四十一:getActionBar為null的解決以及ActionBar的Back鍵

我們用getActionBar獲得ActionBar例項,將其隱藏或做其他操作。 ActionBar actionBar = getActionBar(); 不過我這樣做了,但是actionBar是null。 問題是由Activity基類引起的,當使用Ap

Android問題集錦轉載三:Javah 常見錯誤記錄-NDK與JNI除錯

測試檔案:hello-jni/src/com/example/hellojni/HelloJni.java/** * 該檔案來自 Android NDK Sample - HelloJni, 為了便於說明問題,我作了一些修改。 */ package com.example