Android webviewカスタム404エラーページ!
3830 ワード
カスタム404ページ.androidのwebviewコントロールはホームページを読み込むことができます.webviewには二つの方法があります.
WebChromeClientは主に解析を処理して、ウェブページなどのブラウザのすることを誇張して、Javascriptのダイアログを処理することを補助して、ウェブサイトのアイコン、ウェブサイトのtitle、ローディングの進度: onClose Window(WebViewを閉じる) onCreateWindow() onJs Alert(WebViewでalertは弾けないもので、あなたのWebChromeClient処理をカスタマイズしてポップアップする必要があります.) onJs Propt onJs Confirm onProgress Changed onReceivedIcon onReceivedTitle
例えば、プログレスバーを追加して、インターフェースをより友好的にします.
WebView CientはWebViewのために各種の通知、要求イベントを処理するのです.具体的には以下を含みます.
onLoadResource onPageStart onPageFinish onReceive Error //これは私達が欲しい方法です.onReceivedhttp AuthRequest.
じゃ、私達がカスタマイズした404インターフェースをロードするには二つが必要です.
コードは以下の通りです
この方法を使う前に、他のユーザー定義のインターフェースをロードしたいです.例えば、ページが99%以上にロードされた時に、webviewのtitleを検出します.nullまたは「ページが見つからない(違う携帯電話がヒントを与えるかもしれない)」なら、ユーザー定義のエラーインターフェースにジャンプしても、同じく短いフラッシュ元404インターフェースが現れます.
文章の最初の方法を見つけたら、思い切ってこの方法を捨てました.携帯電話の提示が違っていますので、tomcatや他のサーバーが他のエラー情報を返します.これは私も意味測定が必要です.遅くなく、科学的ではありません.
経験には限りがあり、技術が乏しく、ご参考までに.批判の叱正を歓迎する
WebChromeClientは主に解析を処理して、ウェブページなどのブラウザのすることを誇張して、Javascriptのダイアログを処理することを補助して、ウェブサイトのアイコン、ウェブサイトのtitle、ローディングの進度: onClose Window(WebViewを閉じる) onCreateWindow() onJs Alert(WebViewでalertは弾けないもので、あなたのWebChromeClient処理をカスタマイズしてポップアップする必要があります.) onJs Propt onJs Confirm onProgress Changed onReceivedIcon onReceivedTitle
例えば、プログレスバーを追加して、インターフェースをより友好的にします.
WebView CientはWebViewのために各種の通知、要求イベントを処理するのです.具体的には以下を含みます.
onLoadResource onPageStart onPageFinish onReceive Error //これは私達が欲しい方法です.onReceivedhttp AuthRequest.
じゃ、私達がカスタマイズした404インターフェースをロードするには二つが必要です.
コードは以下の通りです
1 webView = (WebView) findViewById(R.id.webv);// 2 webView.getSettings().setJavaScriptEnabled(true); // js , js , 3 webView.getSettings().setSupportMultipleWindows(true); 4 5 webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
6 7 webView.setWebChromeClient(new MyWebChromeClient() 8 {
9 public void onProgressChanged(WebView view, int progress)// 10 {11 activity.setTitle(" ...Loading...");12 activity.setProgress(progress * 100);13 if(progress >= 100){14 new Thread(new Runnable() {15 @Override16 public void run() {17 Message msg=handler.obtainMessage();// , 18 msg.what=2;// 19 handler.sendMessage(msg);// !20 }
21 }).start();
22 activity.setTitle(R.string.app_name);23 }24 }25 }26 );27 28 webView.setWebViewClient(new WebViewClient() {29 public void onReceivedError(WebView view, int errorCode, String description, String failingUrl)
30 {
31 view.stopLoading();32 view.clearView();33 Message msg=handler.obtainMessage();// , 34 msg.what=1;// 404 35 handler.sendMessage(msg);// !36 }37 public boolean shouldOverrideUrlLoading(WebView view, String url)
38 {39 view.loadUrl(url);40 return true;41 }42 });43 webView.addJavascriptInterface(this, "javatojs");// activity java_js js 44 webView.loadUrl(URL);45 checkUPPay();// 46 }47 /**48 * handler 49 */50 protected Handler handler = new Handler(){51 public void handleMessage(Message message){52 switch (message.what) {53 case 0:54 myDialog.show();55 break;56 case 1:57 webView.loadUrl(URL404);58 break;59 case 2:60 myDialog.dismiss();61 break;62 }63 }64 };
説明:この2つの方法はいずれもシステム内蔵の方法ですが、それでも短いジャンプがあります.ジャンプする瞬間に既存の404ページが見えます.他の文章の分析を理解しましたが、一部の文章はwebviewでページを読み込むのは2つのスレッドを通して行われるので、エラーメッセージを受信した時にもう一つのスレッドが元のページを表示する可能性があります.だからちょっと「フラッシュ」があります.この方法を使う前に、他のユーザー定義のインターフェースをロードしたいです.例えば、ページが99%以上にロードされた時に、webviewのtitleを検出します.nullまたは「ページが見つからない(違う携帯電話がヒントを与えるかもしれない)」なら、ユーザー定義のエラーインターフェースにジャンプしても、同じく短いフラッシュ元404インターフェースが現れます.
文章の最初の方法を見つけたら、思い切ってこの方法を捨てました.携帯電話の提示が違っていますので、tomcatや他のサーバーが他のエラー情報を返します.これは私も意味測定が必要です.遅くなく、科学的ではありません.
経験には限りがあり、技術が乏しく、ご参考までに.批判の叱正を歓迎する