JavaScript 警告在 Android WebView 中无效

在我的应用程序中,我使用的是 WebView,我使用的是 JavaScript alert( )方法,但它不工作,没有弹出窗口出现。

在我的清单文件中,我已经添加了

<uses-permission android:name="android.permission.INTERNET"></uses-permission>

并且在活动文件中我已经添加了

mWebView = (WebView) findViewById(R.id.webview);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.loadUrl("file:///android_asset/demo.html");

在布局 xml 文件中,我添加了

<WebView
android:id="@+id/webview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>

知道如何在 WebView中启用完整的 JavaScript吗?


更新

谢谢 Mark
html文件中的 alert()方法现在正在工作:)。

现在 WebView有两个问题:
1: 我在装入 WebView的 html 文件中使用 <textarea>,并尝试用印地语字体写入,但是当我尝试写印地语文本时,它显示为符号(像[]这样的矩形符号)。

当我在桌面上的 Firefox 浏览器中做同样的事情时,它工作得很好。 如何在 WebView中支持 textarea中的多语言?

2: 当我点击提交并试图在另一个 java 脚本中打开 alert()方法中的文本值时,它不工作了,这是否意味着即使使用了 WebChromeClient 它只适用于当前加载的 html 页面,而不是从该页面调用的 javascripts

125478 次浏览

Check this link , and last comment , You have to use WebChromeClient for your purpose.

The following code will work:

private WebView mWebView;
final Activity activity = this;


// private Button b;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mWebView = (WebView) findViewById(R.id.webview);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.getSettings().setDomStorageEnabled(true);
mWebView.setWebChromeClient(new WebChromeClient() {
public void onProgressChanged(WebView view, int progress) {
activity.setProgress(progress * 1000);
}
});


mWebView.loadUrl("file:///android_asset/raw/NewFile1.html");
}

As others indicated, setting the WebChromeClient is needed to get alert() to work. It's sufficient to just set the default WebChromeClient():

mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.setWebChromeClient(new WebChromeClient());

Thanks for all the comments below. Including John Smith's who indicated that you needed to enable JavaScript.

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

You can try with this, it worked for me

WebView wb_previewSurvey=new WebView(this);




wb_previewSurvey.setWebChromeClient(new WebChromeClient() {
@Override
public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
//Required functionality here
return super.onJsAlert(view, url, message, result);
}


});

if you wish to hide URL from the user, Show an AlertDialog as below.

myWebView.setWebChromeClient(new WebChromeClient() {


@Override
public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
Log.d(TAG, "onJsAlert url: " + url + "; message: " + message);
AlertDialog.Builder builder = new AlertDialog.Builder(
mContext);
builder.setMessage(message)
.setNeutralButton("OK", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int arg1) {
dialog.dismiss();
}
}).show();
result.cancel();
return true;
}
}