JavaScript警报在Android WebView中不起作用

JavaScript警报在Android WebView中不起作用,javascript,android,Javascript,Android,在我的应用程序中,我使用的是WebView,我使用的是JavaScript-alert()方法,但它不起作用,不会出现弹出窗口 在我的清单文件中,我添加了 <uses-permission android:name="android.permission.INTERNET"></uses-permission> mWebView = (WebView) findViewById(R.id.webview); mWebView.getSettings().setJavaS

在我的应用程序中,我使用的是
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


更新

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);
        }

    });
谢谢马克
html
文件中的
alert()
方法现在正在工作:)

现在在
WebView
中有两个问题:
1:我正在加载到
WebView
的html文件中使用
,并尝试在其中使用印地语字体书写,但当我尝试书写印地语文本时,它会显示为符号(矩形符号,如[])

当我在桌面上的firefox浏览器中执行同样的操作时,效果很好。 如何在
WebView
textarea
中支持多种语言

2:当我单击submit并试图在另一个java脚本中打开
alert()
方法中的文本值时,它不起作用,这是否意味着即使在使用
WebChromeClient

它只适用于当前加载的html页面,而不适用于从该页面调用的
javascripts

检查链接和最后一条评论,您必须使用
WebChromeClient

以下代码将起作用:

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");
}

正如其他人所指出的,需要设置WebChromeClient才能使
alert()
正常工作。只需设置默认WebChromeClient()即可:

mWebView.getSettings().setJavaScriptEnabled(true);
setWebChromeClient(新的WebChromeClient());

谢谢你的评论。包括John Smith,他指出您需要启用JavaScript。

您可以试试这个,它对我很有效

webView.setWebChromeClient(new WebChromeClient() {
    @Override
    public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
        return super.onJsAlert(view, url, message, result);
    }
});
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);
        }

    });

如果您希望对用户隐藏URL,请显示一个AlertDialog,如下所示

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;
            }
    }

这是“JavaScript”,而不是“Java脚本”、“Java脚本”或“Java脚本”(所有这些都出现在您最初的问题中)。我已经为您更正了。@T.J.Crowder我敢说它应该被称为Javascript。@kriselbek:no.:-)“JavaScript”是Oracle的注册商标(Total love兼并和收购),并(经许可)用于其实现。在这两种情况下,大写字母S是该名称唯一的规范形式。当然,该语言的另一个名称是ECMAScript(或ES),但除了在谈论时,没有人真正使用它。谢谢!webView.setWebChromeClient(新的WebChromeClient(){@Override public boolean onJsAlert(webView视图,字符串url,字符串消息,JsResult结果){返回super.onJsAlert(视图,url,消息,结果);});你的评论对我有帮助。。正如下面尼希尔的回答一样,它很有魅力。但是。。。。WebClient是否比WebChromeClient有任何优势。这可能是一个愚蠢的问题,但无论如何:为什么要重写一个方法,只调用具有相同参数的super方法?不要忘记添加
webview.getSettings().setJavaScriptEnabled(true)
yes,但大多数情况下,您都希望调整WebChromeClient的事件,因此…我最终通过添加
mWebView.getSettings().setJavaScriptEnabled(true)使其工作
mWebView.setWebChromeClient(新WebChromeClient())之前别忘了添加
webview.getSettings().setJavaScriptEnabled(true)
这非常有效,但是当我从javascript调用
提示符
而不是显示提示符文本时,它会说,“页面在https://... 说:“完全打破了应用程序中嵌入的WebView的沉浸感