我的原生应用程序包含一个WebView,WebView会在Web上加载一个网页。例如,html是从
加载的http://dongshengcn.com/test.html
似乎从web(而不是本地)加载的任何页面都无法从本地设备加载任何文件。
我的问题是:
是否可以将http://dongsheng.com/test.html加载到webview(作为本机应用程序的一部分)来访问本地设备上的文件?
答案 0 :(得分:3)
以下是一些可以尝试的事情:
要使用本地文件,您需要将它们放在项目的assets文件夹中,并使用诸如file:/// android_asset /之类的URL调用它们。例如,如果您在assets文件夹中添加mypage.html,则可以使用file:///android_asset/mypage.html在webview中调用它。
检查以确保您的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" />
在Github上查看以下应用程序,作为奖励,还修复了Honeycomb和ICS中的webview的几个错误。这是一个关于如何将webview与本地文件一起使用的完整示例: https://github.com/bricolsoftconsulting/WebViewIssue17535FixDemo
编辑:问题澄清后的附录:
是的,可以从网络加载本地页面,但您必须使用技巧来绕过浏览器的安全措施。
用自定义方案替换文件:// 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; } }