我正在开发一个带有webview的应用程序。我有一个fileupload元素,我的应用程序可以通过在“openfilechooser”方法中显示AlertDialog来选择“相机”或“图库”。
这就是我正在做的事情:
- 我点击fileupload元素
- 弹出一个AlertDialog来读取我选择的“相机”或“画廊”
- 我改变主意,放弃选择文件,然后点击“Android后退按钮”
当我点击后退按钮时,所有javascript停止,我的页面停止响应。
javascript有理由停止吗? 提前致谢
答案 0 :(得分:0)
如果要在Web视图上使用后退按钮,则必须在意图进入Web视图之前声明。您必须实现方法onBackPrasses或onKeyPressed并获取KEY值。您可以在此链接上找到答案Enable back button in WebView
也用于启用javascript
WebView myWebView = (WebView) findViewById(R.id.webview);
WebSettings webSettings = myWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
答案 1 :(得分:0)
我尝试了几个技巧,最后找到了解决方案。
在所有这些方法调用之后,FileUpload元素需要一个“ValueCallback”。所以“onActivityResult”必须将结果返回给fileupload元素。但是,当用户取消警报对话框时,无法调用“onActivityResult”方法。这会导致fileupload元素生成错误。
我将“setOnCancelListener”添加到我的警告对话框中,如下所示:
.setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
mUploadMessage.onReceiveValue(null);
mUploadMessage = null;
}
})
您必须至少将“null”返回到文件上传元素才能继续运行。否则fileupload会停止,这会导致所有javascript停顿。
我还抓住了另一个使文件上传失速的案例:
- 用户点击fileupload元素
- 选择一个选择(Cam或Galller并不重要)
- 凸轮或图库显示,用户按下“后退按钮”
这会将RESULT_CANCELED代码返回到“onActivityResult”方法,您必须像这样处理它:
@Override
protected void onActivityResult(int requestCode, int resultCode,
Intent intent) {
try {
super.onActivityResult(requestCode, resultCode, intent);
if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK
&& intent != null)
mUploadMessage.onReceiveValue(intent.getData());
else
mUploadMessage.onReceiveValue(null);
} catch (Exception e) {
Log.e("Error", e.getLocalizedMessage());
mUploadMessage.onReceiveValue(null);
} finally {
mUploadMessage = null;
}
}
mUploadMessage定义如下:
private ValueCallback<Uri> mUploadMessage;