【问题标题】:Access local file in a WebView在 WebView 中访问本地文件
【发布时间】:2012-05-16 14:12:52
【问题描述】:

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

加载 html

http://dongshengcn.com/test.html

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

我的问题是:

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

【问题讨论】:

  • 发布你的代码和你把文件放在哪里?
  • 这可能是一种安全机制。我在测试网页上尝试了 file:///mnt/sdcard/some.jpg 链接,发现在安卓设备上单击时它甚至不会尝试加载。但是,如果我长按链接并从弹出菜单中选择“打开”,则引用的本地图像实际上会打开。也用 html 文件试了一下。

标签: android webview


【解决方案1】:

这里有几件事可以尝试:

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

  2. 检查以确保您在 Manifest 中具有适当的 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); 返回真; } 返回假; } }

【讨论】:

  • 谢谢,西奥。我稍微澄清了我的问题。
  • 请看我上面修改后的回复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多