2012-05-16 140 views
3

我的本机应用程序包含WebView,WebView将Web页面加载到Web上。例如,HTML从访问WebView中的本地文件

http://dongshengcn.com/test.html

加载它似乎加载(而不是局部)从网站的任何页面无法加载从本地设备的任何文件。

我的问题是:

是否有可能加载到网页视图(如原生应用程序的一部分)到本地设备访问文件http://dongsheng.com/test.html

+0

发布您的代码并在其中放置文件? –

+0

这可能是一个安全机制。我在一个测试网页上尝试了一个file:///mnt/sdcard/some.jpg链接,发现它甚至不会在单击Android设备时尝试加载。但是,如果我长时间按下链接并从弹出式菜单中选择“打开”,则实际会引用所引用的本地图像。试用了一个html文件。 –

回答

3

这里有几件事情尝试:

  1. 要使用你需要将它们放在你的项目的资产文件夹,并使用URL,如文件调用它们的本地文件:/// android_asset /。例如,如果您将mypage.html添加到资产文件夹中,则可以使用file:///android_asset/mypage.html在webview中调用它。

  2. 检查以确保您的Manifest中具有相应的webview权限。对于web视图正常工作,您需要:

    <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. 在Github上,其作为奖金还修复了几个错误与web视图在下面的应用程序看看蜂窝和ICS。它是关于如何使用本地文件的网页视图一个完整的例子: https://github.com/bricolsoftconsulting/WebViewIssue17535FixDemo

编辑:问题澄清后附录:

是的,这是可以从网页加载本地页面,但您必须使用技巧绕过浏览器的安全措施。

替换文件:使用自定义方案的URL // android_asset /部分(例如文件/// android_asset /的mypage.html成为myscheme:///mypage.html),并在将这些自定义方案的网址您页。实施WebViewClient的shouldOverrideUrlLoading,检查URL是否以自定义方案开头,如果是,则使用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

谢谢Theo。我稍微澄清了我的问题。 – dongshengcn

+0

请参阅我上面修改的回复。 – Theo

+2

为什么你需要'... _ LOCATION'用户权限? –