2012-05-16 4 views
3

Mon application native inclut un WebView et WebView charge une page Web hors site Web. Par exemple, le code HTML est chargé à partirAccès au fichier local dans un WebView

http://dongshengcn.com/test.html

Il semble ne importe quelle page web chargée à partir (au lieu de local) ne peut pas charger un fichier à partir du périphérique local.

Ma question est:

Est-il possible pour un http://dongsheng.com/test.html chargé à une WebView (dans le cadre de l'application native) pour accéder au fichier sur le périphérique local?

+0

postez votre code et où vous avez mis le fichier? –

+0

Cela peut être un mécanisme de sécurité. J'ai essayé un lien de fichier: ///mnt/sdcard/some.jpg sur une page Web de test, et j'ai constaté qu'il n'essaierait même pas de charger lorsqu'on clique sur un appareil Android. Cependant, si j'ai longtemps appuyé sur le lien et sélectionné 'ouvrir' dans le menu contextuel, alors l'image locale référencée s'ouvrirait réellement. Je l'ai essayé avec un fichier HTML aussi. –

Répondre

3

Voici quelques choses à essayer:

  1. Pour utiliser les fichiers locaux, vous devez les placer dans votre dossier de projet actif et invoquer leur utilisation des URL telles que file: /// android_asset /. Par exemple, si vous ajoutez mypage.html dans votre dossier assets, vous pouvez l'appeler dans le webview avec le fichier: ///android_asset/mypage.html.

  2. Vérifiez que vous disposez des autorisations de visualisation Web appropriées dans votre manifeste. Pour le WebView fonctionne correctement, vous avez besoin:

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

  3. Jetez un oeil à l'application suivante sur Github, qui, comme un bonus fixe également quelques bugs avec le WebView dans Honeycomb et ICS. Il est un exemple complet sur la façon d'utiliser le WebView avec des fichiers locaux: https://github.com/bricolsoftconsulting/WebViewIssue17535FixDemo

EDIT: Addendum après la clarification de la question:

Oui, il est possible de charger une page locale à partir du Web, mais vous devez utiliser une astuce pour contourner les mesures de sécurité du navigateur.

Remplacez le fichier: // android_asset/partie des URL par un schéma personnalisé (par exemple, le fichier /// android_asset/mypage.html devient myscheme: ///mypage.html), et placez ces URL de schéma personnalisées dans votre page. Implémentez le shouldOverrideUrlLoading de WebViewClient, vérifiez si l'URL commence par le schéma personnalisé et, si tel est le cas, redirigez vers la page locale à l'aide de webview.loadUrl.

 
    mWebView.setWebViewClient(new WebViewClient() 
    { 
     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) 
     { 
      if (url != null && url.startsWith("myscheme://")) 
      { 
       String newUrl = url.replace("myscheme://", "file://android_asset/"); 
       mWebView.loadUrl(newUrl); 
       return true; 
      } 
      return false; 
     } 
    } 
+0

Merci, Theo. J'ai clarifié un peu ma question. – dongshengcn

+0

Veuillez voir ma réponse révisée ci-dessus. – Theo

+2

Pourquoi auriez-vous besoin des permissions d'utilisateur '..._ LOCATION'? –

Questions connexes