O Android Webview lança o navegador ao chamar loadurl


473

Eu criei um Activityque tem um título e uma visualização da web em um LinearLayout. No onResume()método que chama webView.loadUrl(url). O problema é que a atividade primeiro mostra o título com o restante da tela em branco e, em seguida, o navegador do dispositivo é iniciado com a página do URL. O que eu quero ver é a página exibida WebViewabaixo do título. Qual poderia ser o problema?

Edit : Ok, fiz algumas pesquisas adicionais e encontrei este:

Clicar em URLs abre o navegador padrão

Aponta para o WebViewtutorial aqui .

Basta implementar o web client e configurá-lo.


Menciono isso porque você resolveu meu problema ... Obrigado.
Jesse Black

2
@ Ray, considere escrever uma resposta para esta pergunta, se você encontrou uma solução, e aceite-a. Isso ajudará outras pessoas com o mesmo problema.
precisa saber é o seguinte

1
Eu tive um problema ainda mais desagradável. Acontece que mesmo um redirecionamento será carregado com o navegador se um WebViewClient personalizado não for usado.
Jakob Weisblat


Este também fala sobre isso ... youtube.com/watch?v=4bIF5In1c8s
Athira Reddy

Respostas:


799

Respondendo à minha pergunta com base nas sugestões de Maudicus e Hit.

Confira o tutorial do WebView aqui . Basta implementar o web client e configurá-lo antes do loadUrl . A maneira mais simples é:

myWebView.setWebViewClient(new WebViewClient());

Para um processamento mais avançado do conteúdo da web, considere o ChromeClient.


3
Para evitar que o WebView inicie o navegador padrão ao abrir a página inicial.
Magno C

23
Obrigado por este incrível e incrível pedaço de bruxaria! +1 ... Um menos para você, Android ...
Josh

Excelente resposta. Também resolveu o meu problema.
Omid1989

Isso funciona apenas para o carregamento inicial? E se você quiser navegar no navegador de dentro do aplicativo?
logicbloke

5
myWebView.webViewClient = WebViewClient()em Kotlin!
Thomas Pritchard

98

Usa isto:

lWebView.setWebViewClient(new WebViewClient());

@DigvijaySingh verifique o original da resposta aceita. Originalmente, não tinha esse código. Foi adicionado meio após esta resposta
Vladyslav Matviienko

52

use assim:

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

    WebView myWebView = (WebView) findViewById(R.id.webView1);
    myWebView.setWebViewClient(new WebViewClient());
    myWebView.loadUrl("https://google.com");
}

25

Faça sua atividade assim.

public class MainActivity extends Activity {
WebView browser;

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

    // find the WebView by name in the main.xml of step 2
    browser=(WebView)findViewById(R.id.wvwMain);

    // Enable javascript
    browser.getSettings().setJavaScriptEnabled(true);  

    // Set WebView client
    browser.setWebChromeClient(new WebChromeClient());

    browser.setWebViewClient(new WebViewClient() {

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
                }
        });
     // Load the webpage
    browser.loadUrl("http://google.com/");
   }
}

1
setJavaScriptEnabled(true)introduz vulnerabilidades XSS no seu aplicativo. Não usá-lo se você não precisa ter o JavaScript
apex39

A linha que habilita o JavaScript é super importante, caso contrário, você poderá obter You need to enable JavaScript to run this app.e pesquisar no Google, apenas revelará pessoas com problemas com o reagir nativo e você ficará louco porque o JavaScript já está ativado nas configurações do navegador.
Jordan H

19

Eu estava enfrentando o mesmo problema e encontrei a solução Documentação oficial do Android sobre o WebView

Aqui está o meu onCreateView()método e aqui eu usei dois métodos para abrir os URLs O

método 1 está abrindo o URL no navegador e o

método 2 está abrindo o URL no seu WebView desejado.
E eu estou usando o método 2 para o meu aplicativo e este é o meu código:

public class MainActivity extends Activity {
   private WebView myWebView;

     @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

      View rootView = inflater.inflate(R.layout.fragment_webpage_detail, container, false);

      // Show the dummy content as text in a TextView.
      if (mItem != null) {

         /* Method : 1
          This following line is working fine BUT when we click the menu item then it opens the URL in BROWSER not in WebView */
         //((WebView)   rootView.findViewById(R.id.detail_area)).loadUrl(mItem.url);

        // Method : 2
        myWebView = (WebView) rootView.findViewById(R.id.detail_area); // get your WebView form your xml file
        myWebView.setWebViewClient(new WebViewClient()); // set the WebViewClient
        myWebView.loadUrl(mItem.url); // Load your desired url
    }

    return rootView;
}                                                                                               }

6

Basta responder, você pode usar assim

public class MainActivity extends AppCompatActivity {

     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         WebView webView = new WebView(this);
         setContentView(webView);
         webView.setWebViewClient(new WebViewClient());
         webView.loadUrl("http://www.google.com");
   }
}

6

Experimente este código ...

private void startWebView(String url) {

    //Create new webview Client to show progress dialog
    //When opening a url or click on link

    webView.setWebViewClient(new WebViewClient() {      
        ProgressDialog progressDialog;

        //If you will not use this method url links are opeen in new brower not in webview
        public boolean shouldOverrideUrlLoading(WebView view, String url) {              
            view.loadUrl(url);
            return true;
        }

        //Show loader on url load
        public void onLoadResource (final WebView view, String url) {
            if (progressDialog == null) {
                // in standard case YourActivity.this
                progressDialog = new ProgressDialog(view.getContext());
                progressDialog.setMessage("Loading...");
                progressDialog.show();
            }
        }
        public void onPageFinished(WebView view, String url) {
            try{
            if (progressDialog.isShowing()) {
                progressDialog.dismiss();
                progressDialog = null;
            }
            }catch(Exception exception){
                exception.printStackTrace();
            }
        }

    }); 

     // Javascript inabled on webview  
    webView.getSettings().setJavaScriptEnabled(true); 

    // Other webview options
    /*
    webView.getSettings().setLoadWithOverviewMode(true);
    webView.getSettings().setUseWideViewPort(true);
    webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
    webView.setScrollbarFadingEnabled(false);
    webView.getSettings().setBuiltInZoomControls(true);
    */

    /*
     String summary = "<html><body>You scored <b>192</b> points.</body></html>";
     webview.loadData(summary, "text/html", null); 
     */

    //Load url in webview
    webView.loadUrl(url);
}

1

Se você vir uma página vazia , ative o JavaScript.

webView.setWebViewClient(new WebViewClient());
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setDomStorageEnabled(true);
webView.loadUrl(url);
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.