我的本机应用程序包括一个 WebView,并且 WebView 加载了一个离网的网页。例如,html是从
http://dongshengcn.com/test.html
似乎从网络(而不是本地)加载的任何页面都无法从本地设备加载任何文件。
我的问题是:
是否可以将http://dongsheng.com/test.html加载到 webview(作为本机应用程序的一部分)来访问本地设备上的文件?
这里有一些可以尝试的事情:
要使用本地文件,您需要将它们放在项目的资产文件夹中,并使用 URL(例如 file:///android_asset/)调用它们。例如,如果您在 asset 文件夹中添加 mypage.html,则可以使用 file:///android_asset/mypage.html 在 Web 视图中调用它。
检查以确保您在清单中拥有适当的 webview 权限。为了使 webview 正常工作,您需要:
<uses-permission android:name="android.permission.INTERNET" />
看看 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);
返回真;
}
返回假;
}
}
| 归档时间: |
|
| 查看次数: |
26227 次 |
| 最近记录: |