android - 如何滚动到 WebView url 中的命名 anchor ?

标签 android android-webview uri-fragment

我在 Android 的 WebView 中的特定命名 anchor 上打开本地存储的页面时遇到兼容性问题。目前我只是简单地使用

webView.loadUrl("file:///android_asset/page.html#fragment");

这在我的 4.1 设备上运行良好,但其他设备的用户一直提示它无法运行。

例如在 4.0.3 打开页面时没有 url fragment #fragment 部分打开正常,但用户收到“网页不可用”错误。

我还尝试通过两次调用 loadUrl(String) 方法来打开 fragment ,首先不调用 fragment ,然后调用 fragment 。还使用 JavaScript 更改页面的位置。

我还能尝试什么?

最佳答案

首先,RFC 1738没有为 file:// 方案指定 URL fragment 部分。文件 URI 由 file://、主机名和路径组成——仅此而已。

因此,文件 URI 中的 anchor 不应被支持。但出于某种原因,Android 从 Jelly Bean 开始就支持它们。如果您希望他们也参与制作 Ice Cream Sandwich :

private static String BASE_URL = "file:///android_asset/";

mWebView.setWebViewClient(new WebViewClient() {
    @Override
    public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
        try {
            if (url.startsWith(BASE_URL) && url.contains("#")) {
                url = url.replace(BASE_URL, "");
                InputStream is = getAssets().open(url.substring(0, url.indexOf("#")));
                return new WebResourceResponse("text/html", "utf-8", is);
            }
        } catch(IOException e) {
            Log.e("DKDK", "shouldInterceptRequest", e);
        }
        return null;
    }
});

关于android - 如何滚动到 WebView url 中的命名 anchor ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15115798/

相关文章:

java - 视频不在 WebView 中播放,但播放音频

javascript - 有没有办法滚动到 URI 片段而不将它们添加到历史记录中?

http - URL 片段标识符是否发送到服务器?

javascript - Android webview 使用 GSAP : Attempt to remove non-JNI local reference, 转储线程

android - 更新卡片 View 列表中的文本?

android - 动态添加 subview 到ScrollView

java - float 大于或小于零

android webview 内容不可选择

加载 WebView 时的 Android 进度条

html - CSS 选择器片段支持