我是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>
在url中,我有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 min版本10 - 构建目标2.3.3
但是android代码只工作一次,即当我创建一个新的android项目并运行相同时,我可以看到javascript警报出现。从下次未显示javascript警报。即使是html页面中的任何文本更改(比如我将“数据库1”修改为“数据库2”)也不会显示。
我尝试了以下内容: - 清除appcache - 卸载应用程序,然后再次运行该项目 - 清除
请告诉我这里我做错了什么。任何帮助将不胜感激。
答案 0 :(得分:2)
webView.setWebViewClient(new WebViewClient());
webView.setWebChromeClient(new WebChromeClient());
在我的代码中使用这些,然后我的alert()完美地运行
答案 1 :(得分:0)
这是一个非常老的问题,但是我最近遇到了同样的问题,并希望与以后遇到此问题的任何人分享解决方案。
您需要为WebView分配自定义WebChromeClient来处理警报。
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),并且不允许显示新对话框。