5

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

http://dongshengcn.com/test.html

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

我的问题是:

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

4

1 回答 1

5

这里有几件事可以尝试:

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

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

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

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

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

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

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

    mWebView.setWebViewClient(new WebViewClient()  
    {  
        @覆盖  
        public boolean shouldOverrideUrlLoading(WebView view, String url)  
        {  
            if (url != null && url.startsWith("myscheme://"))  
            {  
                String newUrl = url.replace("myscheme://", "file://android_asset/");  
                mWebView.loadUrl(newUrl);  
                返回真;  
            }  
            返回假;  
        }  
    }  
于 2012-05-16T17:43:34.293 回答