JavaScript警报在Android WebView中无效

时间:2011-03-11 10:43:55

标签: javascript android

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

如何在JavaScript中启用完整WebView


更新

谢谢标志
 alert()文件中的html方法现在正在运行:)。

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

当我在桌面上的firefox浏览器中执行相同操作时,它可以正常工作。 任何线索如何在textarea中的WebView中为多种语言提供支持?

2:当我点击提交并尝试在另一个java脚本中的alert()方法中打开文本的值时,它不起作用,即使在使用WebChromeClient之后也是如此 它仅适用于当前加载的html页面,而不是从该页面调用的javascripts

7 个答案:

答案 0 :(得分:100)

正如其他人指出的那样,需要设置WebChromeClient才能使alert()生效。只需设置默认的WebChromeClient():

就足够了
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.setWebChromeClient(new WebChromeClient());

感谢下面的所有评论。包括表示您需要启用JavaScript的John Smith。

答案 1 :(得分:82)

检查this链接和上次评论,您必须使用WebChromeClient

答案 2 :(得分:19)

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

答案 3 :(得分:5)

以下代码可以使用:

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

答案 4 :(得分:1)

添加

test

它会起作用。

答案 5 :(得分:0)

你可以试试这个,它对我有用

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

    });

答案 6 :(得分:0)

如果您希望向用户隐藏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;
            }
    }