0

我正在开发一个带有 webview 的应用程序。我有一个文件上传元素,我的应用程序可以通过在“openfilechooser”方法中显示一个 AlertDialog 来选择“相机”或“画廊”。这就是我正在做

的事情:-我点击文件上传元素
-弹出警报对话框以读取我选择的“相机”或“图库”
-我改变主意并放弃选择文件并单击“Android后退按钮”

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

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

4

2 回答 2

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);
于 2013-09-24T14:55:53.260 回答
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 停止。

我还发现了另一种导致文件上传停止的情况:
- 用户点击文件上传元素
- 选择一个选项(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;
于 2013-09-25T14:39:05.613 回答