Android 当使用WebViewClient shouldOverrideUrlLoading时,WebChromeClient中的链接不会打开safari

Android 当使用WebViewClient shouldOverrideUrlLoading时,WebChromeClient中的链接不会打开safari,android,webviewclient,webchromeclient,android-webview,Android,Webviewclient,Webchromeclient,Android Webview,我使用WebChromeClient在服务器上打开指向news.html的链接,它会打开safari并显示内容,ok 但是 当我实现WebViewClient应该重写URL以拦截指向.pdf文件的链接时的调用(使用另一个类),指向news.html的WebChromeClient链接将保留在webview中,不再打开safari 我做错了什么,但是什么 代码段:(链接很长,所以我把它缩短了) 返回false表示未处理url,应在WebView中打开该url。如果要在外部浏览器中打开url,则需要

我使用WebChromeClient在服务器上打开指向news.html的链接,它会打开safari并显示内容,ok

但是

当我实现WebViewClient应该重写URL以拦截指向.pdf文件的链接时的调用(使用另一个类),指向news.html的WebChromeClient链接将保留在webview中,不再打开safari

我做错了什么,但是什么

代码段:(链接很长,所以我把它缩短了)


返回false
表示未处理url,应在
WebView
中打开该url。如果要在外部浏览器中打开url,则需要显式打开

myWebView.setWebViewClient(new WebViewClient(){
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if(url.startsWith("http://www.domain.nl/pdf")){
            Intent i = new Intent();
            i.putExtra("url", url);
            i.setClassName("nl.domain.domain", "nl.domain.domain.PdfActivity");
            i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(i);
            return true ;
        }

        startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url));
        return true;
    }
});

返回false
表示未处理url,应在
WebView
中打开该url。如果要在外部浏览器中打开url,则需要显式打开

myWebView.setWebViewClient(new WebViewClient(){
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if(url.startsWith("http://www.domain.nl/pdf")){
            Intent i = new Intent();
            i.putExtra("url", url);
            i.setClassName("nl.domain.domain", "nl.domain.domain.PdfActivity");
            i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(i);
            return true ;
        }

        startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url));
        return true;
    }
});

要打开PDF文件url,请执行以下操作:

在PDF文件url字符串的开头添加“”字符串

试试这个,行吗

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    WebView webView;

    webView = new WebView(this);

    WebSettings settings = webView.getSettings();
    settings.setJavaScriptEnabled(true);
    settings.setPluginsEnabled(true);
    webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);

    if (webUrl.equals(XmlFileUrl.MemberDownloadAppForm)) {
        webUrl = "http://docs.google.com/viewerembedded=true&url=" + webUrl;
    }

    webView.setWebViewClient(new WebViewClient() {
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }
    });

    webView.loadUrl(url);

    setContentView(webView);
}

要打开PDF文件url,请执行以下操作:

在PDF文件url字符串的开头添加“”字符串

试试这个,行吗

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    WebView webView;

    webView = new WebView(this);

    WebSettings settings = webView.getSettings();
    settings.setJavaScriptEnabled(true);
    settings.setPluginsEnabled(true);
    webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);

    if (webUrl.equals(XmlFileUrl.MemberDownloadAppForm)) {
        webUrl = "http://docs.google.com/viewerembedded=true&url=" + webUrl;
    }

    webView.setWebViewClient(new WebViewClient() {
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }
    });

    webView.loadUrl(url);

    setContentView(webView);
}

一个帮助我做类似事情的例子

对于地理位置添加:

myWebView.getSettings().setGeolocationEnabled(true)

以及:


一个帮助我做类似事情的例子

对于地理位置添加:

myWebView.getSettings().setGeolocationEnabled(true)

以及:


感谢您的回复,清晰且有用。这样,除覆盖pdf链接外,所有链接都将在浏览器中打开。但是有些链接可以保留在WebChromeClient中,所以我考虑了上面的构造。在WebChromeClient中使用WebViewClient仅覆盖但处理其余部分。但我猜不是这样的……你能解释一下为什么需要使用
WebChromeClient
?我也在WebChromeClient中使用地理定位。感谢您的回复,清晰且有用。这样,除覆盖pdf链接外,所有链接都将在浏览器中打开。但是有些链接可以保留在WebChromeClient中,所以我考虑了上面的构造。在WebChromeClient中使用WebViewClient仅覆盖但处理其余部分。但我猜不是这样的……你能解释一下为什么需要使用
WebChromeClient
?我也在WebChromeClient中使用地理定位。