2012-10-29 3 views
3

내 웹보기에서 '웹 페이지를 사용할 수 없음'오류 페이지 대신 경고 상자를 표시하려고하지만 문서별로 onReceivedError() 메서드를 추가 한 후에도 작동하지 않습니다. 내가 뭔가를 누락하는 경우, 여기에 내 코드 ... 미리안드로이드 webview onReceivedError() 작동하지 않습니다

public class CloudPageHolder extends Activity { 
WebView mWebView; 
ProgressDialog _dialog ; 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

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


    mWebView.getSettings().setJavaScriptEnabled(true); 
    mWebView.getSettings().setDomStorageEnabled(true); 
    mWebView.loadUrl("file:///android_asset/www/MyPage.html"); 
    mWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(false); 
    mWebView.getSettings().setPluginsEnabled(false); 
    mWebView.getSettings().setSupportMultipleWindows(false); 
    mWebView.getSettings().setSavePassword(false); 
    mWebView.getSettings().getAllowFileAccess(); 
    mWebView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY); 
    mWebView.getSettings().setUseWideViewPort(true); 
    mWebView.getSettings().setLoadWithOverviewMode(true); 

    mWebView.setWebViewClient(new WebViewClient() { 
     public void onReceivedError(WebView view, int errorCode, String description,  String failingUrl) { 
      new AlertDialog.Builder(CloudPageHolder.this) 
       .setMessage("Something went wrong!") 
       .setPositiveButton(android.R.string.ok, 
         new AlertDialog.OnClickListener() 
         { 
          public void onClick(DialogInterface dialog, int which) 
          { 

           dialog.dismiss(); 
          } 
         }) 
       .setCancelable(false) 
       .create() 
       .show(); 
       } 
     }); 


    mWebView.setWebChromeClient(new WebChromeClient() { 
     @Override 
     public boolean onJsAlert(WebView view, String url, final String message, final android.webkit.JsResult result) 
     { 
      new AlertDialog.Builder(CloudPageHolder.this) 
       .setMessage(message) 
       .setPositiveButton(android.R.string.ok, 
         new AlertDialog.OnClickListener() 
         { 
          public void onClick(DialogInterface dialog, int which) 
          { 
           result.confirm(); 
          } 
         }) 
       .setCancelable(false) 
       .create() 
       .show(); 

      return true; 
     } 
    }); 
} 

감사합니다 ...

+0

실제 오류 는요? –

답변

3

나는 당신의 오류가 있지만 onReceivedError의 문서가 다소 missleading 것의 확실하지 오전입니다. 이 시점에서이 방법을 사용하여 HTTP 오류 응답을 차단할 수 없습니다. 체크 these posts.

this other post에 설명 된 방법을 사용하여 비슷한 해결 방법을 개발 중입니다.

곧 업데이트 될 예정입니다. 행운을 빈다!

1

결국이 방법을 찾았지만 꽤 좋지 않습니다. 상태 코드에 액세스 할 수있는 XMLHttpRequest를 통해 javascript로 페이지를로드 할 수 있습니다. 이것은 진행 상황 알림을 엉망으로 만들고 다른 바람직하지 않은 행동을 할 수도 있습니다. 하지만 내 애플 리케이션에서 허용했다, 그래서 다른 사람에게 도움이 될 수 있습니다.

public class StatusNotifyingWebView extends WebView { 

    public interface OnStatusReceivedListener { 
     void onStatusReceived(int statusCode); 
    } 

    private class JsInterface { 
     public void notifyRequestStatus(final int statusCode) { 
      getHandler().post(new Runnable() { 
       @Override 
       public void run() { 
        mOnStatusReceivedListener.onStatusReceived(statusCode); 
       } 
      }); 
     } 
    } 

    private OnStatusReceivedListener mOnStatusReceivedListener; 

    public void setOnStatusReceivedListener(final OnStatusReceivedListener listener) { 
     mOnStatusReceivedListener = listener; 
     addJavascriptInterface(new JsInterface(), "statusNotifyJsInterface"); 
    } 

    public void loadUrlWithStatusEvent(final String url) { 
     Assert.assertNotNull(mOnStatusReceivedListener); 
     final String script = 
       " var httpRequest = new XMLHttpRequest();\n" 
       + "httpRequest.open('GET', '" + url + "', false);\n" 
       + "try { httpRequest.send(null); } catch (err) { }\n" 
       + "statusNotifyJsInterface.notifyRequestStatus(httpRequest.status);\n" 
       + "document.write(httpRequest.responseText);\n" 
       + "document.close();\n"; 

     final String html = "<html><head><script>" + script + "</script></head><body/></html>"; 
     loadDataWithBaseURL(url, html, "text/html", "UTF-8", null); 
    } 
} 
관련 문제