1

サーバー上の news.html へのリンクを開くために WebChromeClient を使用します。サファリが開き、コンテンツが表示されます。

しかし...

WebViewClient shouldOverrideUrlLoading を実装して、.pdf ファイルへのリンクであるときに呼び出しをインターセプトすると (別のクラスを使用します)、news.html への WebChromeClient リンクが webview にとどまり、サファリを開かなくなりました...

私は何か間違ったことをしていますが、何ですか?

コードスニペット: (リンクが長いので短くしました)

myWebView = (WebView)findViewById(R.id.webView);
myWebView.getSettings().setJavaScriptEnabled(true);

//only to catch url override
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 ;
                }
                else {
                    return false ;
                }
        }
});

myWebView.setWebChromeClient(new WebChromeClient());
//loading
myWebView.loadUrl("http://www.domain.nl/news.html");
4

3 に答える 3

1

return false;は、URL が処理されなかったため、 で開く必要があることを意味しWebViewます。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;
    }
});
于 2013-03-08T13:08:19.937 に答える
0

PDF ファイルの URL を開くには:

PDFファイルのURL文字列の先頭に「 http://docs.google.com/viewerembedded=true&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);
}
于 2014-04-22T10:37:37.850 に答える
0

が似たようなことをするのを助けた例

地理位置情報の追加:

myWebView.getSettings().setGeolocationEnabled(true);

と :

private class MyWebChromeClient extends WebChromeClient {

  .........

 @Override
    public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) 
    {
        // callback.invoke(String origin, boolean allow, boolean remember);              
        callback.invoke(origin, true, false);
    }
 }
于 2014-11-27T13:41:13.200 に答える