採用WebView實現安卓手機OA時,OA系統中有js的alert、confirm、window.open()不起做用。要點:重載WebChromeClient類;實現alert對應的onJsAlert,confirm對應的onJsConfirm,window.open對應的onCreateWindow;setSupportMultipleWindows支持彈出窗口;setWebViewClient支持在webview上打開鏈接。javascript
使用webView. setWebChromeClient(new WebChromeClient())java
當webView. setWebChromeClient(new WebChromeClient())後,默認已實現alert和confirm方法。可是提示窗口標題有帶url,並且window.open沒有反應。要自定義alert和confirm窗口和實現window.open須要重載WebChromeClient。web
新建類MyWebChromeClient,繼承WebChromeClient瀏覽器
(一)重載onJsAlert方法實現js的alertide
public boolean onJsAlert(WebView view, String url, String message, JsResult result) {ui
final AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext());this
builder.setTitle("OA提示信息")url
.setMessage(message)blog
.setPositiveButton("肯定", null)繼承
.setCancelable(false)
.create()
.show();
result.confirm();
return true;
}
當用WebView訪問一個網頁,帶有javascript的alert提示時,出現的效果
(二) 重載onJsConfirm方法實現js的confirm
public boolean onJsConfirm(WebView view, String url, String message, final JsResult result) {
final AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext());
builder.setTitle("OA確認信息")
.setMessage(message)
.setPositiveButton("肯定", new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
result.confirm();
}
}).setNeutralButton("取消", new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
result.cancel();
}
})
.create()
.show();
return true;
}
(三) 重載onCreateWindow方法實現js的window.open
public WebView newWebView = null;
@Override
public boolean onCreateWindow(WebView view, boolean dialog, boolean userGesture, Message resultMsg) {
newWebView = new WebView(view.getContext());
view.addView(newWebView);
WebSettings settings = newWebView.getSettings();
settings.setJavaScriptEnabled(true);
//這個setWebViewClient要加上,不然window.open彈出瀏覽器打開。
newWebView.setWebViewClient(new WebViewClient());
newWebView.setWebChromeClient(this);
WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
transport.setWebView(newWebView);
resultMsg.sendToTarget();
return true;
}
(三) 重載onCloseWindow方法實現js的window.close
public void onCloseWindow(WebView view) {
if (newWebView != null) {
newWebView.setVisibility(View.GONE);
view.removeView(newWebView);
}
}
(四)修改MainActivity的onCreateView
WebSettings setting = webView1.getSettings();
setting.setJavaScriptEnabled(true);
//沒有setSupportMultipleWindows的話window.open不會增長新窗口
setting.setSupportMultipleWindows(true);
//沒有setWebViewClient的話點鏈接會採用瀏覽器打開
webView1.setWebViewClient(new WebViewClient());
webView1.setWebChromeClient(new MyWebChromeClient());
webView1.loadUrl(sUrl);