Android 內嵌html頁面、交互

0、html頁面 label標籤設置id
1、js文件中通過document.getElementById("id").innerHTML = str;給html頁面設置值,方法代碼

//接收android傳遞的數據,並顯示在html上
function AndroidToWeb0(str){
    document.getElementById("company").innerHTML = str;
    alert(str);//通過下面代碼去響應這個alert
}

用於響應js中的alert

webView.setWebChromeClient(new WebChromeClient() {
       @Override
       public boolean onJsAlert(WebView view, String url, String message, final JsResult result) {

       AlertDialog.Builder b2 = new AlertDialog.Builder(PreviewRatifyNoticeActivity.this)
                  .setTitle("提示").setMessage(message)
                  .setPositiveButton("ok",
                      new AlertDialog.OnClickListener() {
                          @Override
                          public void onClick(DialogInterface dialog, int which) {
                               // TODO Auto-generated method stub
                               result.confirm();
                          }
        });

        b2.setCancelable(false);
        b2.create();
        b2.show();
        return true;
     }

     @Override
     public boolean onJsConfirm(WebView view, String url, String message, JsResult result) {
          // TODO Auto-generated method stub
          return super.onJsConfirm(view, url, message, result);
     }

     @Override
     public boolean onJsPrompt(WebView view, String url, String message, String defaultValue,JsPromptResult result) {
          // TODO Auto-generated method stub
          return super.onJsPrompt(view, url, message, defaultValue, result);
     }
});

2、獲取並配置webview

webView = (WebView) findViewById(R.id.web_view);
//設置支持js
webView.getSettings().setJavaScriptEnabled(true);
webView.requestFocus();
webView.setScrollBarStyle(SCROLLBARS_OUTSIDE_OVERLAY);  
//設置webview的背景色
webView.setBackgroundColor(getResources().getColor(R.color.bg_gray));
//設置加載網頁
webView.loadUrl("file:///android_asset/ratify_notice.html");

3、如果加載過html頁面文件後就進行傳值,那麼會傳值失敗,初步認定是因爲雖然發出頁面加載請求了,但是很可能頁面加載較慢,傳值比較快,而導致加載失敗。所以可用以下方式,目的是等頁面加載完畢再傳值

//這樣設置是爲了防止webview頁面未加載完成就調用賦值方法而導致的先賦值後加載頁面,
//從而導致賦值失敗
webView.setWebViewClient(new WebViewClient() {
      // 重寫shouldOverrideUrlLoading方法,使點擊鏈接後不使用其他的瀏覽器打開。
      @Override
      public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            // 如果不需要其他對點擊鏈接事件的處理返回true,否則返回false
            return true;
     }

     @Override
     public void onPageStarted(WebView view, String url, Bitmap favicon) {
            // TODO Auto-generated method stub
            super.onPageStarted(view, url, favicon);
            //打開時顯示加載框
            showProgressDialog("get");
      }

      @Override
      public void onPageFinished(WebView view, String url) {
           // TODO Auto-generated method stub
           super.onPageFinished(view, url);
           //加載完成關閉加載框
           webView.post(new Runnable() {
              @Override
              public void run() {
                 webView.loadUrl("javascript:AndroidToWeb0('" + 要傳的值 + "')");
              }
           });
           hideProgressDialog();
       }
});
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章