为什么WebChromeClient中的openFileChooser对文档隐藏?使用这种方法安全吗?

Pon*_*rai 9 android android-webview

我看到的大多数地方,文件上传功能WebView都是使用openFileChooser()方法实现的.使用这种方法是合法/安全的吗?如果我在代码中使用它,我的代码会在任何地方破解吗?如果我使用这种方法有任何安全问题吗?

为什么android会在旧版本中隐藏此API?只有在5.0以上他们已经引入了onShowFileChooser()方法,这意味着他们在5.0以下的网络视图中正式支持文件上传?

caw*_*caw 15

使用旧的openFileChooser(...)回调并没有任何安全隐患.没关系.唯一的缺点是它不会在某些平台级别上被调用,因此无法工作.

  • void openFileChooser(ValueCallback<Uri> uploadMsg) 适用于Android 2.2(API级别8),最高可达Android 2.3(API级别10)
  • openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType) 适用于Android 3.0(API等级11),最高可达Android 4.0(API等级15)
  • openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture) 适用于Android 4.1(API级别16),最高可达Android 4.3(API级别18)
  • onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, WebChromeClient.FileChooserParams fileChooserParams) 适用于Android 5.0(API级别21)及更高版本

您可以使用一个抽象出来的库,并在不同的平台级别上处理所有这些回调,以便它可以正常工作.例:

https://github.com/delight-im/Android-AdvancedWebView

您还可以查看源代码的完成情况:

https://github.com/delight-im/Android-AdvancedWebView/blob/0f06e73ecee13ebc4552ac00bc0848e18662a25d/Source/src/im/delight/android/webview/AdvancedWebView.java#L597

https://github.com/delight-im/Android-AdvancedWebView/blob/0f06e73ecee13ebc4552ac00bc0848e18662a25d/Source/src/im/delight/android/webview/AdvancedWebView.java#L1044

它没有文档的事实只是意味着你不能依赖它.当它在Android 2.2中引入时,没有人知道它会在Android 4.4中停止工作,但你不得不接受它.


shk*_*der 0

由于这没有记录在WebChromeClient中,所以它不是一个安全的 API,但它是合法的。

但您仍然可以使用它。确保捕获任何错误。但不能保证该过程一定有效。