阻止WebView打开浏览器

Afr*_*Gfx 6 browser android webview android-webview

我已经为给定的WebView启用了JavaScript,并在WebView中打开了新链接,而不是在浏览器中. 这是主要活动

    package com.Afrogfx.pronouns;

    import android.os.Bundle;
    import android.annotation.SuppressLint;
    import android.app.Activity;
    import android.view.Menu;
    import android.webkit.WebView;

    @SuppressLint("SetJavaScriptEnabled")
    public class MainActivityPronouns extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main_activity_pronouns);

    WebView wvHtml = (WebView) findViewById(R.id.webview);
    wvHtml.getSettings().setBuiltInZoomControls(true);
    wvHtml.getSettings().setJavaScriptEnabled(true);
    wvHtml.loadUrl("http://afrogfx.com/appcatcategories.php?catid=13&parentid=11");
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_main_activity_pronouns, menu);
    return true;
    }
    }
Run Code Online (Sandbox Code Playgroud)

我如何能够在我的代码中打开WebView(App)内的所有链接,而不是在浏览器中打开(不向用户显示在浏览器中打开).

Rav*_*avi 16

为此,只需创建扩展webclient的子类并使用该类的方法onPageFinished(WebView c,String url)和
public boolean shouldOverrideUrlLoading(最终的WebView视图,最终的String url)

这是代码 -

 myWebView.setWebViewClient(new WebViewClient()       
        {
             @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) 
            {
                //view.loadUrl(url);
                System.out.println("hello");
                return true;
            }
        });
        myWebView.loadUrl(url);
Run Code Online (Sandbox Code Playgroud)

  • 文档说你应该返回 false 才能继续加载该 url。返回 true 将中止加载 (2认同)

Die*_*kiy 6

如果您使用 Kotlin:

webView.webViewClient = object : WebViewClient() {
                override fun shouldOverrideUrlLoading(
                    view: WebView?,
                    request: WebResourceRequest?
                ): Boolean {
                    return false
                }
            }
Run Code Online (Sandbox Code Playgroud)


San*_*ela -2

所以你必须使用 WebviewClient ..这是该类

private class HelloWebViewClient extends WebViewClient 
{
    @Override
    public boolean shouldOverrideUrlLoading(final WebView view, final String url) 
    {
        Utils.showActivityViewer(WebsiteActivity.this);
        new Thread(new Runnable() 
        {

            public void run()
            {
                view.loadUrl(url);
            }



            }).start();  



        return true;
    }
}
Run Code Online (Sandbox Code Playgroud)

并在 webview 中绑定为

webview.setWebViewClient(new HelloWebViewClient());
Run Code Online (Sandbox Code Playgroud)

并参考http://developer.android.com/reference/android/webkit/WebViewClient.html

  • 欢迎来到“只有创建视图层次结构的原始线程才能触及其视图。” 例外 ) (3认同)