Android Webview Anchor Link (Jump link) not working

前端 未结 7 1217
后悔当初
后悔当初 2020-12-01 06:53

I have a WebView in my Android App that is loading an HTML string using the loadDataWithBaseURL() method. The problem is that local anchor links (

相关标签:
7条回答
  • 2020-12-01 06:56

    I was also facing the same issue. Anchor link was jumping to arbitrary position. Make sure not to hide webview when loading.

    Use Invisible instead of gone.

    This change fixed my issue.

    0 讨论(0)
  • 2020-12-01 07:03

    Android Webview Anchor Link (Jump link) Not Working

    True, WebView Anchor Links, or Jump Links initiated through the #LINK extension to the URL will not work when the WebView is inside of a ScrollView(*).

    Still, the problem for me and apparently others is that the #LINK does work when launched from a touch in an href, but is ignored when launched via the URL. Other symptoms include navigating to the link only on the first time in a session or navigating to the bottom of the html file.

    The Solution is to load the url after a short delay.

    Here is an example:

    My html is saved in assets: res/assets/help.html

    With anchors like this:

    <a name="helplinkcontacts"/>
    

    And loaded like this:

    final String baseUrl = "file:///android_asset/help.html#helplinkcontacts";
    final WebView helpTextView = (WebView)findViewById(R.id.help_dialog_text);
    helpTextView.loadUrl(baseUrl); // Ignores Anchor!!
    

    I added the timer like this:

    final String baseUrl = "file:///android_asset/help.html#helplinkcontacts";
    final WebView helpTextView = (WebView)findViewById(R.id.help_dialog_text);
    Timer timer = new Timer();
    timer.schedule(new TimerTask() {
        @Override
        public void run() {
            helpTextView.loadUrl(baseUrl);
        }
    }, 400);
    

    Note: Shorter delays, such as 100ms failed to navigate to the link.

    (*) It turns out that so many of us have our WebViews inside of ScrollViews because we started out with a TextView rendering Spannable text which both supports some HTML and requires a ScrollView. Anyways, remove the ScrollView as soon as you convert your TextView into a WebView.

    0 讨论(0)
  • 2020-12-01 07:04
    try this
    
    String myTemplate = "<a href=\"#link\">LINK!</a><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><a name=\"link\"></a>Testing!";
    
    myWebView.loadDataWithBaseURL(null, myTemplate, "text/html", "utf-8", null);
    

    the word "Testing!" must be outside of the screen to see it works.

    0 讨论(0)
  • 2020-12-01 07:07

    WebView in Android 4.0 fails to open URLs with links in them. e.g. "file:///android_asset/help.html#helplinkcontacts"

    Here is how I got around it

    WebView wv = (WebView) nagDialog.findViewById(R.id.wv);
    wv.getSettings().setJavaScriptEnabled(true);
    wv.setWebViewClient(new MyWebViewClient(link));
    wv.loadUrl("file:///android_asset/help.html");
    

    And define the custom WebViewClient class

    class MyWebViewClient extends WebViewClient {
        private String link;
    
        public MyWebViewClient(String link) {
            this.link = link;
        }
    
        @Override
        public void onPageFinished(WebView view, String url) {
            if (!"".equals(link) && link != null)
                view.loadUrl("javascript:location.hash = '#" + link + "';");
        }
    }
    
    0 讨论(0)
  • 2020-12-01 07:12

    My Solution is , Check this Answer

    public class MainActivity extends Activity { 
        WebView myWebView; 
        public static boolean flag = false; 
        @Override 
        public void onCreate(Bundle savedInstanceState) { 
            super.onCreate(savedInstanceState); 
            myWebView = new WebView(this); 
            myWebView.getSettings().setJavaScriptEnabled(true); 
            myWebView.loadUrl("file:///android_asset/chapters.html"); 
            setContentView(myWebView); 
            myWebView.setWebViewClient(new WebViewClient() { 
                public void onPageFinished(WebView view, String url) { 
                    if (url.contains("#") && flag == false) { 
                        myWebView.loadUrl(url); 
                        flag = true; 
                    } else { 
                        flag = false; 
                    } 
                } 
    
            }); 
        } 
    } 
    
    0 讨论(0)
  • 2020-12-01 07:16

    It looks like the problem is that I had a WebView within a ScrollView. The WebView isn't able to scroll to an anchor link when configured like this. After refactoring my layout to eliminate the ScrollView, the anchor links work correctly.

    0 讨论(0)
提交回复
热议问题