我正在开发一个带有 webview 的应用程序。我有一个文件上传元素,我的应用程序可以通过在“openfilechooser”方法中显示一个 AlertDialog 来选择“相机”或“画廊”。这就是我正在做
的事情:-我点击文件上传元素
-弹出警报对话框以读取我选择的“相机”或“图库”
-我改变主意并放弃选择文件并单击“Android后退按钮”
当我单击后退按钮时,所有 javascript 都会停止,我的页面也会停止响应。
javascript有停止的理由吗?提前致谢
我正在开发一个带有 webview 的应用程序。我有一个文件上传元素,我的应用程序可以通过在“openfilechooser”方法中显示一个 AlertDialog 来选择“相机”或“画廊”。这就是我正在做
的事情:-我点击文件上传元素
-弹出警报对话框以读取我选择的“相机”或“图库”
-我改变主意并放弃选择文件并单击“Android后退按钮”
当我单击后退按钮时,所有 javascript 都会停止,我的页面也会停止响应。
javascript有停止的理由吗?提前致谢
如果你想在 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);
我尝试了几个技巧,终于找到了解决方案。
在所有这些方法调用之后,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 停止。
我还发现了另一种导致文件上传停止的情况:
- 用户点击文件上传元素
- 选择一个选项(Cam 或 Galller 无关紧要)
- 出现 Cam 或 Gallery 并且用户按下“返回按钮”
这将返回一个 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;