当前位置: 首页 > 知识库问答 >
问题:

在android浏览器(WebView)中打开链接

叶桐
2023-03-14

我最近实现了shouldInterceptRequest方法来检测链接的时间“http://sitemercado.com.br/valida“点击在android浏览器中打开它,而不是在webview中内部打开,直到它工作为止。链接在浏览器中打开,但当我回来查看webview应用程序时,它也被加载了,我希望它只在浏览器中加载。

我的代码如下:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        pb = (findViewById(R.id.pb));
        mWebView = findViewById(R.id.webview);
        mWebView.setListener(this, this);
        mWebView.loadUrl("https://www.sitemercado.com.br/frade");
        mWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
        mWebView.setWebViewClient(new WebViewClient(){
            @Override
            public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
                super.onReceivedError(view, request, error);
                Intent i = new Intent(MainActivity.this, off.class);
                startActivity(i);
                overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
                finish();
            }
        });

        mWebView.setWebViewClient(new WebViewClient(){
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                if (Uri.parse(url).getHost().equals("www.sitemercado.com.br/valida")) {
                    return true;

                }
                String valida = "https://www.sitemercado.com.br/valida";
                Intent i = new Intent(Intent.ACTION_VIEW);
                i.setData(Uri.parse(valida));
                startActivity(i);
                Toast.makeText(getApplicationContext(), "1Detectou", Toast.LENGTH_SHORT).show();

                return false;
                }
        });

我哪里做错了?

共有1个答案

尉迟安民
2023-03-14

除非我弄错了,否则以下是错误的:

    mWebView.setWebViewClient(new WebViewClient(){
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            if (Uri.parse(url).getHost().equals("www.sitemercado.com.br/valida")) {
                return true;

            }
            String valida = "https://www.sitemercado.com.br/valida";
            Intent i = new Intent(Intent.ACTION_VIEW);
            i.setData(Uri.parse(valida));
            startActivity(i);
            Toast.makeText(getApplicationContext(), "1Detectou", Toast.LENGTH_SHORT).show();

            return false;
        }
    });

您将获取URL的主机,然后将其与完整URL进行比较。这永远不会是平等的。

那么,只有当该声明为假时,您才会启动链接?这是相反的,因为你在问题中说,只有当URL是valida时,你才希望它在浏览器中启动。按照你的方式,无论你试图加载什么URL,Android都会启动一个指向valida的浏览器。

试试这个:

    mWebView.setWebViewClient(new WebViewClient(){
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            if (Uri.parse(url).getPath().contains("valida")) {
                Intent i = new Intent(Intent.ACTION_VIEW);
                i.setData(Uri.parse(url));
                startActivity(i);
                Toast.makeText(getApplicationContext(), "1Detectou", Toast.LENGTH_SHORT).show();

                return true;
            }

            return false;
        }
    });
 类似资料:
  • 我有一个非常简单的测试应用程序,上面有一个webview组件。我正试图阻止链接在浏览器中打开,但“shouldoverrideurlloading”看起来对我不起作用。 有人能帮我看看哪里有错误吗?

  • 问题内容: 我有一个简单的webview加载页面。该页面具有一些在Web视图中打开的链接。那是应该做的,所以一切正常。 但是该页面上只有一个链接应该作为弹出窗口加载,因此我希望人们单击它时可以在普通浏览器中打开它。但是正如我所说,所有链接都在Web视图中打开,因此该链接也可以这样做。 我的问题是,如何才能在普通浏览器中以弹出形式打开此链接?可能吗 链接是可变的,因此它总是在变化,不能在应用程序中进

  • 问题内容: 是否有任何(简单/内置方式)打开新浏览器(我的意思是默认的OS浏览器)窗口来查找Electron链接的方法,而不是访问您Electron应用程序中的链接? 问题答案: 您可以简单地使用:

  • 问题内容: <a target=”_blank” data-rel=”external” href="http://www.kidzout.com">www.kidzout.com 问题答案: 作为建议类似的问题,使用JavaScript来调用与参数设置为当按照InAppBrowser文档: 这应该起作用,尽管更好,更灵活的解决方案是拦截所有链接的事件,并使用从链接属性读取的参数进行调用。 请记住

  • 问题内容: Javascript如何检测网站是加载到Android的常规浏览器中还是加载到另一个应用程序的WebView中?我想在这两种情况下运行略有不同的代码。 问题答案: 活动- > onCreate RES- >值-> strings.xml Java脚本

  • 问题内容: 我如何在默认浏览器中单击按钮以打开以下链接: button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { open("www.google.com”); // just what is the ‘open’ method? } }); ? 问题答案: 使用方法。