【问题标题】:Using Android WebView to load external HTML with local resources (images, javascript)?使用 Android WebView 使用本地资源(图像、javascript)加载外部 HTML?
【发布时间】:2011-11-04 19:36:17
【问题描述】:

我想在 Android 上创建一个简单的基于 Web 的应用程序,该应用程序可以从“assets”目录加载某些大文件,例如 Javascript 和本地用户界面元素。但是,在加载外部 HTML 时,我无法使用本地资产目录。所以外部服务器会给出这样的结果:

<script type="text/javascript" src="file:///android_asset/javascript.js"/>

即使网站本身来自外部网站,WebView 也会使用它。我知道存在安全风险,但有没有办法通过只允许应用程序端的特定 URL 来做到这一点?

有什么办法可以做到吗?

【问题讨论】:

    标签: android webview android-webview


    【解决方案1】:

    首先,您必须将所有资产复制到某个地方(例如外部存储)。

    然后,要过滤 URL,您应该覆盖方法

    public boolean shouldOverrideUrlLoading(WebView view, String url);
    

    在 WebViewClient 类中。

    补充说: 当您的应用程序启动时,将资产放入 /sdcard/somefolder/ 参见 getExternalFilesDir()

    在 shouldOverrideUrlLoading 中将 url 覆盖到类似的东西

    file:///sdcard/somefolder/<your filename here>
    

    应该很简单

    public boolean shouldOverrideUrlLoading(WebView view, String url) {
       url = "file://" + context.getExternalFilesDir().getAbsolutePath() + "/" + url;
       super.shouldOverrideUrlLoading(view, url);
    }
    

    【讨论】:

    • 这实际上不起作用,你测试了吗? Android 在加载资源(如图片和 JavaScript)时不会执行 shouldOverrideUrlLoading()。有一种方法可以中断这个加载过程,叫做 shouldInterceptRequest(),但它只在 Android API 11 及更高版本上可用,我需要它用于 Android 2.2(API 8 及更高版本)。
    • 试试这个方法developer.android.com/reference/android/webkit/…, java.lang.String, java.lang.String, java.lang.String, java.lang.String)
    • 认为这篇文章差不多:stackoverflow.com/questions/4780899/… 基本上 api lvl 11 支持它,之前的任何东西都只是搞砸了 :)
    • 不起作用。你对 shouldOverrideUrlLoading 的覆盖什么都不做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-11
    相关资源
    最近更新 更多