Android“后退按钮”导致javascript停止

时间:2013-09-24 14:44:19

标签: javascript android webview back

我正在开发一个带有webview的应用程序。我有一个fileupload元素,我的应用程序可以通过在“openfilechooser”方法中显示AlertDialog来选择“相机”或“图库”。 这就是我正在做的事情:

- 我点击fileupload元素
- 弹出一个AlertDialog来读取我选择的“相机”或“画廊”
- 我改变主意,放弃选择文件,然后点击“Android后退按钮”

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

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

2 个答案:

答案 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;