Android“Back Button”导致javascript停止

Android "Back Button" causes javascript to stop

本文关键字:导致 javascript 停止 Button Back Android      更新时间:2023-09-26

我正在开发一个带有网络视图的应用程序。我有一个文件上传元素,我的应用程序可以通过在"打开文件选择器"方法中显示警报对话框来选择"相机"或"图库"。这是我正在做的事情:

-我点击文件上传元素
- 弹出一个警报对话框,读取我选择的"相机"或"画廊">
- 我改变主意,放弃选择文件,然后单击"Android后退按钮">

当我单击后退按钮时,所有javascript都停止了,我的页面也停止了响应。

JavaScript有理由停止吗?提前致谢

如果要在 Web 视图上使用后退按钮,则必须在意图 Web 视图之前声明。您必须实现方法 onBackPrasses 或 onKeyPress 并获取 KEY 值。您可以在此链接上找到答案 在 WebView 中启用后退按钮

也用于启用JavaScript

WebView myWebView = (WebView) findViewById(R.id.webview);
WebSettings webSettings = myWebView.getSettings();
webSettings.setJavaScriptEnabled(true);

我尝试了几个技巧,终于找到了解决方案。

FileUpload元素在所有这些方法调用之后都需要一个"ValueCallback"。所以"onActivityResult"必须向fileupload元素返回一个结果。但是当用户取消警报对话框时,无法调用"onActivityResult"方法。这会导致文件上传元素生成错误。

我将"setOnCancelListener"添加到我的警报对话框中,如下所示:

.setOnCancelListener(new DialogInterface.OnCancelListener() {
    @Override
    public void onCancel(DialogInterface dialog) {
     mUploadMessage.onReceiveValue(null);
     mUploadMessage = null;
    }
})

您必须至少向文件上传元素返回"null"才能继续操作。否则文件上传会停滞,这会导致所有 javascript 停滞不前。

我还抓住了另一个使文件上传停滞的案例:
- 用户点击文件上传元素
- 选择一个选择(凸轮或加勒无关紧要(
- 凸轮或图库出现,用户按下"后退按钮">

这会将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;