1. 程式人生 > 實用技巧 >android webview不能彈出alert問題

android webview不能彈出alert問題

關於webview不能彈出alert問題,

1、設定能javascript 屬性

WebSettings mWebSettings = webView.getSettings();
mWebSettings.setJavaScriptEnabled(true);

2、設定WebChromeClient屬性

 webView.setWebViewClient(new WebViewClient() {})

下面是完成的webview 示例程式碼:

package com.example.mesapp;

import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface; import android.graphics.Bitmap; import android.os.Build; import android.os.Bundle; import android.util.Log; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; import android.webkit.JsPromptResult; import android.webkit.JsResult;
import android.webkit.WebChromeClient; import android.webkit.WebResourceRequest; import android.webkit.WebResourceResponse; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.EditText; import androidx.annotation.NonNull; import
androidx.appcompat.app.AppCompatActivity; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.ProtocolException; import java.net.URL; import static android.view.KeyEvent.KEYCODE_BACK; public class MainActivity extends AppCompatActivity { private WebView webView; ProgressDialog pro_dialog; //sop // String url = "http://192.168.1.2:96/index.html"; //生產看板 // String url = "http://192.168.1.2:92/index.html"; // String url = "http://www.baidu.com"; //ajax 測試網站 String url = "http://192.168.3.26:96/index.html"; @Override protected void onCreate(Bundle savedInstanceState) { pro_dialog = new ProgressDialog(this); super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // webView = new WebView(this); // webView = findViewById(R.id.wv); webView = new CustomWebView(this); if (Build.VERSION.SDK_INT >=Build.VERSION_CODES.KITKAT) { Log.d("Test","------------可以遠端除錯-----------------"); WebView.setWebContentsDebuggingEnabled(true); } WebSettings mWebSettings = webView.getSettings(); mWebSettings.setJavaScriptEnabled(true);//設定支援javaScript // mWebSettings.setPluginsEnabled(true); mWebSettings.setUseWideViewPort(true); //將圖片調整到適合webview的大小 mWebSettings.setLoadWithOverviewMode(true); // 縮放至螢幕的大小 mWebSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN); // webView.setWebContentDebuggingEnabled(true); mWebSettings.setUserAgentString("User-Agent"); mWebSettings.setLightTouchEnabled(true);//設定用滑鼠啟用被選項 mWebSettings.setBuiltInZoomControls(true);//設定支援縮放 mWebSettings.setDomStorageEnabled(true);//設定DOM快取,當H5網頁使用localStorage時,一定要設定 mWebSettings.setDatabaseEnabled(true); mWebSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);//設定去快取,防止載入的為上一次載入過的 mWebSettings.setSupportZoom(true);//設定支援變焦 webView.setHapticFeedbackEnabled(false); mWebSettings.setPluginState(WebSettings.PluginState.ON); mWebSettings.setAllowFileAccess(true); mWebSettings.setAllowContentAccess(true); mWebSettings.setAllowUniversalAccessFromFileURLs(true); mWebSettings.setAllowFileAccessFromFileURLs(true); // webView.addJavascriptInterface(this,"android");//與js互動使用,沒需求可以註釋掉 webView.setWebViewClient(new WebViewClient() { @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); Log.d("MainActivity","開始載入"); } @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); Log.d("MainActivity","載入結束"); } // 連結跳轉都會走這個方法 @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { Log.d("MainActivity","Url:"+ url ); view.loadUrl(url);// 強制在當前 WebView 中載入 url return true; } }); //設定響應js 的Alert()函式 webView.setWebChromeClient(new WebChromeClient() { @Override public void onProgressChanged(WebView view, int newProgress) { super.onProgressChanged(view, newProgress); Log.d("MainActivity","newProgress:"+ newProgress ); } @Override public void onReceivedTitle(WebView view, String title) { super.onReceivedTitle(view, title); Log.d("MainActivity","標題:"+ title); } @Override public boolean onJsAlert(WebView view, String url, String message, final JsResult result) { AlertDialog.Builder b = new AlertDialog.Builder(MainActivity.this); b.setTitle(""); b.setMessage(message); b.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { result.confirm(); } }); b.setCancelable(false); b.create().show(); return true; } //設定響應js 的Confirm()函式 @Override public boolean onJsConfirm(WebView view, String url, String message, final JsResult result) { AlertDialog.Builder b = new AlertDialog.Builder(MainActivity.this); b.setTitle(""); b.setMessage(message); b.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { result.confirm(); } }); b.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { result.cancel(); } }); b.create().show(); return true; } @Override public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, final JsPromptResult result) { // mReusultText.setText("Prompt input is :" + message); result.confirm(); return super.onJsPrompt(view, url, message, message, result); } }); webView.loadUrl(url); setContentView(webView); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if ((keyCode == KEYCODE_BACK) && webView.canGoBack()) { webView.goBack(); return true; } return super.onKeyDown(keyCode, event); } @Override protected void onDestroy() { //釋放資源 if (webView != null) webView.destroy(); super.onDestroy(); } }