在普通浏览器中打开来自Android Webview的链接作为弹出窗口

2022-09-04 06:24:28

我有一个简单的Webview,可以加载一个页面。此页面有一些在 Web 视图中打开的链接。这就是它应该做的,所以它工作得很好。

但是该页面中有一个链接应该作为弹出窗口加载,因此我希望当人们单击它时,它可以在普通浏览器中打开。但正如我所说,所有链接都在web视图中打开,因此该链接也可以打开。

我的问题是,我如何使此链接在普通浏览器中作为弹出窗口打开?这有可能吗?链接是可变的,因此它总是在变化,它不能在应用程序中硬编码以在新的浏览器浏览器中打开。

这可能吗,我该怎么做?


答案 1

以下是覆盖 Web 视图加载以保留在 Web 视图中或离开的示例:

import android.app.Activity;
import android.os.Bundle;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class TestWebViewActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        WebView webView = (WebView) findViewById(R.id.webview);
        webView.setWebViewClient(new MyWebViewClient());
    }
}


class MyWebViewClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if(url.contains("somePartOfYourUniqueUrl")){ // Could be cleverer and use a regex
            return super.shouldOverrideUrlLoading(view, url); // Leave webview and use browser
        } else {
            view.loadUrl(url); // Stay within this webview and load url
            return true;
        }
    }
}

答案 2
public class WebViewActivity extends Activity {

    private WebView webView;
    private ProgressDialog progress;
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.webview);
        WebView myWebView = (WebView) findViewById(R.id.webView1);
        myWebView.setWebViewClient(new MyWebViewClient());
        myWebView.loadUrl("https://www.example.com");
    }

    private class MyWebViewClient extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            if (Uri.parse(url).getHost().equals("https://www.example.com")) {
                // This is my web site, so do not override; let my WebView load the page
                return false;
            }
            // Otherwise, the link is not for a page on my site, so launch another Activity that handles URLs
            Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
            startActivity(intent);
            return true;
        }
    }
}