Javascript WebChromeClient onJsAlert接收未定义的消息
我有一个安装了WebChromeClient的android webview。 在网页中执行某个操作时,我创建了一个带有消息的javascript警报,该消息被传递回onJsAlert方法 然后,根据消息,我打开另一个活动。 这在Android>=4上运行良好,但在Android 2.3上不起作用Javascript WebChromeClient onJsAlert接收未定义的消息,javascript,android,Javascript,Android,我有一个安装了WebChromeClient的android webview。 在网页中执行某个操作时,我创建了一个带有消息的javascript警报,该消息被传递回onJsAlert方法 然后,根据消息,我打开另一个活动。 这在Android>=4上运行良好,但在Android 2.3上不起作用 在Android2.3上也会调用onJsAlert方法,但由于某些原因,传递的消息参数未定义。如果您知道为什么会发生这种情况,我们将不胜感激 这是我使用的代码 private WebView webV
在Android2.3上也会调用onJsAlert方法,但由于某些原因,传递的消息参数未定义。如果您知道为什么会发生这种情况,我们将不胜感激 这是我使用的代码
private WebView webView;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.demo);
try {
webView = (WebView) findViewById(R.id.webView);
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webView.setWebChromeClient(new MyJavaScriptChromeClient());
webView.loadUrl("file:///android_asset/texthtml.html");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private class MyJavaScriptChromeClient extends WebChromeClient {
@Override
public boolean onJsAlert(WebView view, String url, String message,
final JsResult result) {
// handle Alert event, here we are showing AlertDialog
new AlertDialog.Builder(WebActivity.this)
.setTitle("JavaScript Alert !")
.setMessage(message)
.setPositiveButton(android.R.string.ok,
new AlertDialog.OnClickListener() {
public void onClick(DialogInterface dialog,
int which) {
// do your stuff
result.confirm();
}
}).setCancelable(false).create().show();
return true;
}
}
这是我的html文件
<html>
点击我!!
这是我使用的代码
private WebView webView;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.demo);
try {
webView = (WebView) findViewById(R.id.webView);
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webView.setWebChromeClient(new MyJavaScriptChromeClient());
webView.loadUrl("file:///android_asset/texthtml.html");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private class MyJavaScriptChromeClient extends WebChromeClient {
@Override
public boolean onJsAlert(WebView view, String url, String message,
final JsResult result) {
// handle Alert event, here we are showing AlertDialog
new AlertDialog.Builder(WebActivity.this)
.setTitle("JavaScript Alert !")
.setMessage(message)
.setPositiveButton(android.R.string.ok,
new AlertDialog.OnClickListener() {
public void onClick(DialogInterface dialog,
int which) {
// do your stuff
result.confirm();
}
}).setCancelable(false).create().show();
return true;
}
}
这是我的html文件
<html>
点击我!!
我也这么做了……但是我的代码在2.3上也很好……你有没有发现任何错误?如果有,请提供错误日志。很遗憾,没有错误。唯一相关的日志是:
webview(9457):singleCursorHandlerTouchEvent-getEditableSupport FASLE
,I/Web控制台(9457):幻灯片放映:未定义:1
,D/DEBUG(9457):JS的信息是:未定义的
,最后两个是我发来的OK我应该在这里发布我的代码让你与你的代码匹配吗我也这么做了…但我的代码在2.3上也很好..你有没有收到任何错误?如果有,请提供你的错误日志否不幸的是,没有错误。唯一相关的日志是:webview(9457):singleCursorHandlerTouchEvent-getEditableSupport FASLE
,I/Web控制台(9457):幻灯片放映:未定义:1
,D/DEBUG(9457):JS的消息是:undefined
,最后两个是我发来的,我是否应该在这里发布我的代码,以便与您的代码相匹配?问题出在别处,存在于我的javascript函数的输入中,该函数确实返回undefined。我只是假设javascript函数工作正常,问题应该出在onJsAlert回调或其他地方。尽管如此,我还是接受了你的回答,因为它帮助我看到我代码的这一部分是正确的,我应该去别处看看。谢谢问题出在别处,并存在于我的javascript函数的输入中,该函数确实返回了未定义的结果。我只是假设javascript函数工作正常,问题应该出在onJsAlert回调或其他地方。尽管如此,我还是接受了你的回答,因为它帮助我看到我代码的这一部分是正确的,我应该去别处看看。谢谢