【问题标题】:Open external WebView links in browser在浏览器中打开外部 WebView 链接
【发布时间】:2019-03-05 04:17:06
【问题描述】:

我知道这已被多次询问,但我浏览了所有答案,但我无法让它发挥作用。我正在尝试制作一个简单的 webview 应用程序来处理本机浏览器中的外部链接。

package com.example.app;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    private WebView webview;
    private long backPressedTime;

    @Override
    public void onBackPressed() {
        if (webview.canGoBack()) {
            webview.goBack();
        } else {
            if (backPressedTime + 2000 > System.currentTimeMillis()) {
                super.onBackPressed();
                return;
            } else {
                Toast.makeText(getBaseContext(), "Press back again to exit", Toast.LENGTH_SHORT).show();
            }
            backPressedTime = System.currentTimeMillis();
        }
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        webview = (WebView) findViewById(R.id.webView);
        webview.setWebViewClient(new WebViewClient());
        webview.getSettings().setJavaScriptEnabled(true);
        webview.getSettings().setDomStorageEnabled(true);
        webview.setOverScrollMode(WebView.OVER_SCROLL_NEVER);
        webview.loadUrl("https://www.myurl.com");
    }

}

任何帮助将不胜感激。谢谢

【问题讨论】:

    标签: android webview


    【解决方案1】:

    您可以使用以下代码覆盖 URL 加载。如果您想自己处理 URL 加载,请返回 true。如果 URL 应该在 WebView 中打开,返回false

    webview.setWebViewClient(new WebViewClient() {
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            // Insert logic here
        }
    }
    

    如果您只想打开外部链接,可以使用以下代码。如果打开的 URL 以您域的基本 URL 开头,则返回 false 并在 WebView 中打开 URL。否则,ACTION_VIEW 意图用于在浏览器中打开 URL 并返回 true。

    webview.setWebViewClient(new WebViewClient() {
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            // Abort if no URL
            if (url == null || !(url.startsWith("http://") ||
                    url.startsWith("https://"))) {
                return false;
            }
    
            // Abort if internal URL
            if (url.startsWith("http://www.myurl.com") || 
                    url.startsWith("https://www.myurl.com")) {
                return false;
            }
    
            // Open external URL in browser
            startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
            return true;
        }
    });
    

    注意:您必须处理“http://...”和“https://...”。因为可能会同时调用该方法。

    【讨论】:

    • 感谢您的回复。我只是不明白如何将这段代码实现到我已经拥有的代码中。这超出了我的想象
    • 我已经修改了我的答案。您必须在 webview.loadUrl(...); 之前将代码添加到 onCreate 方法中。
    猜你喜欢
    • 2014-07-12
    • 2018-02-11
    • 2017-08-06
    • 2015-12-09
    • 2012-09-24
    • 2019-11-23
    • 2021-05-21
    • 2021-06-12
    相关资源
    最近更新 更多