使用loadDataWithBaseURL会禁用WebView中的链接

5
我使用以下代码来加载电子书的HTML内容,其中templateString包含HTML内容,该内容连接到主文件中的样式表和图像。
String itemURL = "file://" + itemPath;
testWV.loadDataWithBaseURL(itemURL,  templateString, "text/html", "UTF-8", "about:blank");

我面临的问题是锚点链接完全不响应。
我注意到如果itemURL为空,或者使用loadData而不是loadDataWithBaseURL,那么链接会正常工作,但我会失去通过itemURL连接的图像和样式的联系。
请注意,webview的可见性始终设置为可见。我已向webview添加以下功能。
this.getSettings().setJavaScriptEnabled(true);
this.requestFocusFromTouch();
this.setVerticalScrollBarEnabled(false);
this.setHorizontalScrollBarEnabled(false);
this.getSettings().setSupportZoom(true);
this.getSettings().setBuiltInZoomControls(true);
this.getSettings().setDisplayZoomControls(false);
this.getSettings().setAllowContentAccess(true);
this.getSettings().setAllowFileAccess(true);
this.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
this.getSettings().setAllowFileAccessFromFileURLs(true);
this.getSettings().setAllowUniversalAccessFromFileURLs(true);

这是为WebView初始化的onTouch方法:
this.setOnTouchListener(new View.OnTouchListener() {

    public boolean onTouch(View v, MotionEvent event) {

        WebView.HitTestResult hr = ((WebView)v).getHitTestResult();
        System.out.println("getExtra: "+hr.getExtra());
        // getExtra always gives null when webview loaded with loadDataWithBaseURL while it should give the url of the link pressed when the user touches a link

        return false;
    }
});

如果需要进一步的代码,我可以分享它。
3个回答

1
WebViewClient设置为您的webView,并在loadDataWithBaseURL中加载数据,并传递您的基础URL。这将有助于将锚链接加载到webview中。
 webview.getSettings().setJavaScriptEnabled(true);
 webview.requestFocusFromTouch();
 webview.setWebViewClient(new MyWebClient());

这是 WebViewClient 类。
class MyWebClient extends WebViewClient {

    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
    }

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return true;
    }

    public void onPageFinished(WebView view, final String url) {
    }
}

请问您是否尝试过它?因为我已经使用了以上所有内容。 - coder
是的,它对我有效,你的基本URL和href URL相同吗? - Priyanka
请问您能否提供一下您使用的loadDataWithBaseURL代码? - coder
我在loadDataWithBaseURL中使用的基本url是其位置的路径:file:///data/user/0/com.app/files/BookUnZipDir/titlepage.xhtml,而href https://www.youtube.com/utubeLink。 - coder
templateString 用于操作 HTML 内容,这就是为什么它非常重要,以便添加分页和其他自定义内容。 - coder
显示剩余6条评论

0

看起来问题与baseURL无关,而是与连接到WebView的css文件有关。在没有baseURL的情况下,css文件未加载,这使得脚注可以被点击。

导致问题的css文件中的代码行是:

pointer-events: none;

所以如果有人正在寻找一种使Webview非交互的方法,这是其中一种方法。

感谢每个为这个问题做出贡献的人。


0
你可以尝试加载HTML文本而不是像下面一样提供URL吗:
 webview.loadDataWithBaseURL(null, htmltext, "text/html", "utf-8", null);

感谢您的贡献,正如我在我的答案中所提到的,我已经尝试过了,它确实可以使文本可选择。但是,在没有URL的情况下,Webview无法连接到通过URL定位的图片和HTML样式表。 - coder
你能检查一下这个链接吗?https://dev59.com/7GXWa4cB1Zd3GeqPMF7T#15162998 - Shalu T D

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接