在 WebView 中访问本地文件

don*_*gcn 5 android webview

我的本机应用程序包括一个 WebView,并且 WebView 加载了一个离网的网页。例如,html是从

http://dongshengcn.com/test.html

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

我的问题是:

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

The*_*heo 6

这里有一些可以尝试的事情:

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

  2. 检查以确保您在清单中拥有适当的 webview 权限。为了使 webview 正常工作,您需要:

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

  3. 看看 Github 上的以下应用程序,它还修复了 Honeycomb 和 ICS 中 webview 的一些错误。这是有关如何将 webview 与本地文件一起使用的完整示例: https://github.com/bricolsoftconsulting/WebViewIssue17535FixDemo

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

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

将 URL 的 file://android_asset/ 部分替换为自定义方案(例如 file///android_asset/mypage.html 变为 myscheme:///mypage.html),并将这些自定义方案 URL 放置在您的页面中。实现 WebViewClient shouldOverrideUrlLoading,检查 URL 是否以自定义方案开头,如果是,则使用 webview.loadUrl 重定向到本地页面。

    mWebView.setWebViewClient(new WebViewClient()  
    {  
        @覆盖  
        公共布尔shouldOverrideUrlLoading(WebView视图,字符串url)  
        {  
            if (url != null && url.startsWith("myscheme://"))  
            {  
                String newUrl = url.replace("myscheme://", "file://android_asset/");  
                mWebView.loadUrl(newUrl);  
                返回真;  
            }  
            返回假;  
        }  
    }