1

我是 Stack Exchange 和 Andorid 开发的新手。

我正在研究Android webview。我的活动课程中有以下代码。

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    WebView wv;
    WebSettings ws;

    try {
      wv = (WebView) findViewById(R.id.webview);
      ws = wv.getSettings();

      ws.setJavaScriptCanOpenWindowsAutomatically(true);
      ws.setJavaScriptEnabled(true);

      wv.clearCache(true);
      wv.loadUrl("http://<ip address>:<port>/<context>");
    } catch (Exception e) {
      e.printStackTrace();
    }
}

在 layout-main.xml 中:

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

在 AndroidManifest.xml 中:

<uses-sdk android:minSdkVersion="10" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name=".POCActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

在网址中,我有 index.html 和以下代码:

<!DOCTYPE html>
<html>
  <head>
    <title>Contact Example</title>
    <script type="text/javascript">
        alert("Start");
    </script>
  </head>
  <body>
    <p>Database 1</p>
    <div id="test"></div>
  </body>
</html>

工作环境: - Eclipse indigo - Android SDK 最低版本 10 - Build Target 2.3.3

但是 android 代码只工作一次,即当我创建一个新的 android 项目并运行相同的项目时,我可以看到出现 javascript 警报。从下次开始不再显示 javascript 警报。即使是html页面中的任何文本更改(比如我将“数据库1”修改为“数据库2”)也不会显示。

我尝试了以下方法: - 清除 appcache - 卸载应用程序,然后再次运行项目 - 清除

请让我知道我在这里做错了什么。任何帮助都感激不尽。

4

2 回答 2

2
webView.setWebViewClient(new WebViewClient());
webView.setWebChromeClient(new WebChromeClient());   

Used these on my code and then my alert() worked pefectly

于 2012-05-17T12:16:11.323 回答
0

这是一个非常古老的问题,但我最近遇到了同样的问题,并想与以后遇到此问题的任何人分享解决方案。

您需要将自定义 WebChromeClient 分配给您的 WebView 以处理警报。

mWebView.webChromeClient = object : WebChromeClient() {
    override fun onJsAlert(view: WebView?, url: String?, message: String?, result: JsResult?): Boolean {
        val alertDialog = AlertDialog.Builder(context)
                    .setMessage(message)
                    .setPositiveButton("OK") { dialogInterface, _ ->
                        dialogInterface.dismiss()
                        result?.confirm()
                    }
                    .setOnCancelListener { result?.cancel() }
                    .setCancelable(true)
                    .create()
        alertDialog.setCanceledOnTouchOutside(true)
        alertDialog.show()

        //Here AlertDialog is just an example. You can also simply show a Toast.
        //But remember to call JsResult.confirm() or JsResult.cancel()

        return true
    }
}

您需要调用JsResult.confirm()JsResult.cancel()通知您的 WebView 用户是否确认或取消了警报对话框。否则,WebView 将假定警报对话框仍在显示(阻止 UI)并且不允许显示新对话框。

于 2020-11-17T05:07:06.250 回答