访问WebView中的本地文件

时间:2012-05-16 14:12:52

标签: android webview

我的原生应用程序包含一个WebView,WebView会在Web上加载一个网页。例如,html是从

加载的

http://dongshengcn.com/test.html

似乎从web(而不是本地)加载的任何页面都无法从本地设备加载任何文件。

我的问题是:

是否可以将http://dongsheng.com/test.html加载到webview(作为本机应用程序的一部分)来访问本地设备上的文件?

1 个答案:

答案 0 :(得分:3)

以下是一些可以尝试的事情:

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

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

    <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上查看以下应用程序,作为奖励,还修复了Honeycomb和ICS中的webview的几个错误。这是一个关于如何将webview与本地文件一起使用的完整示例: https://github.com/bricolsoftconsulting/WebViewIssue17535FixDemo

  4. 编辑:问题澄清后的附录:

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

    用自定义方案替换文件:// android_asset /部分URL(例如文件/// android_asset / mypage.html成为myscheme:///mypage.html),并将这些自定义方案URL放在页面中。实现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;  
            }  
        }