2015-05-06 8 views
6

La maggior parte dei luoghi che vedo, la funzione di caricamento file in WebView viene implementata utilizzando il metodo openFileChooser(). È legale/sicuro usare questo metodo? Se uso questo codice, il mio codice si romperà ovunque? Problemi di sicurezza se utilizzo questo metodo?Perché openFileChooser in WebChromeClient è nascosto dai documenti? È sicuro usare questo metodo?

Perché Android nasconde questa API nelle versioni precedenti? Solo su/sopra 5.0 hanno introdotto il metodo onShowFileChooser(), che significa che ufficialmente non supportano il caricamento di file nelle visualizzazioni web sotto 5.0?

risposta

0

Poiché questo non è documentato in WebChromeClient, no non è un'API sicura, ma sì è legale.

Ma puoi ancora usarlo. Assicurati di rilevare qualsiasi errore. Ma il processo non può essere garantito per funzionare.

+1

Hai idea del motivo per cui Android nasconde questa API nelle versioni precedenti? Solo su 5.0 hanno introdotto il metodo onShowFileChooser(). ciò significa che ufficialmente non supportano il caricamento di file nelle visualizzazioni web sotto 5.0?. Ho aggiornato anche la domanda. –

+0

Non so perché. Ma sì, * ufficialmente * che la funzione di caricamento è disponibile da API-21 e altro ancora. Hai provato a utilizzare 'onShowFileChooser()' su API inferiori? – shkschneider

+0

Non penso che onShowFileChooser() verrà chiamato nelle versioni inferiori. Comunque ho provato e il risultato è lo stesso. Problemi di sicurezza se utilizzo il metodo openFileChooser()? –

11

L'utilizzo delle vecchie richiamate openFileChooser(...)non ha implicazioni sulla sicurezza. Va bene. L'unico svantaggio è che non verrà chiamato su alcuni livelli di piattaforma e quindi non funzionerà.

  • void openFileChooser(ValueCallback<Uri> uploadMsg) funziona su Android 2.2 (API di livello 8) fino a Android 2.3 (API di livello 10)
  • openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType) funziona su Android 3.0 (API di livello 11) fino ad Android 4.0 (API di livello 15)
  • openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture) funziona su Android 4.1 (API di livello 16) fino a Android 4.3 (API di livello 18)
  • onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, WebChromeClient.FileChooserParams fileChooserParams) funziona su Android 5.0 (livello di API 21) e al di sopra

È possibile utilizzare una libreria che astrae questo e si prende cura di tutte queste richiamate su diversi livelli di piattaforma in modo che funzioni. Esempio:

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

Si può anche verificare come si fa nella fonte:

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

Il fatto che è documentato solo significa che non si può contare su di essa. Quando è stato introdotto in Android 2.2, nessuno poteva sapere che avrebbe smesso di funzionare su Android 4.4, ma dovevi accettarlo.

+0

Che dire di 4.4? –

+0

@AntonDuzenko Nessuna possibilità di ottenere qualcosa lavorando lì, sfortunatamente. – caw