Android Webview lance un navigateur lors de l'appel de Loadurl

473

J'ai créé un Activityqui a un titre et une vue Web dans un fichier LinearLayout. Dans la onResume()méthode qu'elle appelle webView.loadUrl(url). Le problème est que l'activité affiche d'abord le titre avec le reste de l'écran vide, puis le navigateur de l'appareil est lancé avec la page de l'URL. Ce que je veux voir, c'est la page affichée WebViewsous le titre. Quel pourrait être le problème?

Edit : Ok, j'ai fait d'autres recherches et trouvé celui-ci:

Cliquer sur les URL ouvre le navigateur par défaut

Il pointe vers le WebViewtutoriel ici .

Implémentez simplement le client Web et définissez-le.

Rayon
la source
Je mentionne cela parce que vous avez résolu mon problème ... Merci.
Jesse Black
2
@Ray, envisagez d'écrire une réponse à cette question, si vous avez trouvé une solution, et acceptez-la. Cela aidera d'autres personnes ayant le même problème.
HitOdessit
1
J'ai eu un problème encore plus méchant. Il s'avère que même une redirection se chargera avec le navigateur si aucun WebViewClient personnalisé n'est utilisé.
Jakob Weisblat
Doit lire ceci - WebView lance un navigateur
Athira Reddy
Celui-ci en parle aussi ... youtube.com/watch?v=4bIF5In1c8s
Athira Reddy

Réponses:

799

Répondre à ma question sur la base des suggestions de Maudicus et Hit.

Consultez le didacticiel WebView ici . Implémentez simplement le client Web et définissez-le avant loadUrl . La manière la plus simple est:

myWebView.setWebViewClient(new WebViewClient());

Pour un traitement plus avancé du contenu Web, pensez à ChromeClient.

Rayon
la source
3
Pour éviter que WebView ne lance le navigateur par défaut lors de l'ouverture de la page initiale.
Magno C
23
Merci pour cet incroyable petit morceau de sorcellerie! +1 ... MOINS UN POUR VOUS, Android ...
Josh
Excellente réponse. A résolu mon problème aussi.
Omid1989
Est-ce que cela ne fonctionne que pour le chargement initial? Et si vous souhaitez naviguer dans le navigateur depuis l'application?
logicbloke
5
myWebView.webViewClient = WebViewClient()à Kotlin!
Thomas Pritchard
98

Utilisez ceci:

lWebView.setWebViewClient(new WebViewClient());
oops.objective
la source
@DigvijaySingh vérifie l'original de la réponse acceptée. À l'origine, il n'avait pas ce code. Il a été ajouté bien après cette réponse
Vladyslav Matviienko
52

utiliser comme ceci:

@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");
}
Vinod Joshi
la source
25

Faites votre activité comme ça.

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/");
   }
}
Abduhafiz
la source
1
setJavaScriptEnabled(true)introduit des vulnérabilités XSS dans votre application. Ne l'utilisez pas si vous n'avez pas besoin de JavaScript
apex39
La ligne activant JavaScript est super importante, sinon vous obtiendrez You need to enable JavaScript to run this app.et googler ne révélera que les personnes ayant des problèmes avec réagir natif et vous deviendrez fou parce que JavaScript est déjà activé dans les paramètres du navigateur.
Jordan H
19

J'étais confronté au même problème et j'ai trouvé la solution Documentation officielle d'Android sur WebView

Voici ma onCreateView()méthode et ici j'ai utilisé deux méthodes pour ouvrir les URL La

méthode 1 ouvre l'URL dans le navigateur et la

méthode 2 ouvre l'URL dans la vue Web souhaitée.
Et j'utilise la méthode 2 pour mon application et voici mon code:

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;
}                                                                                               }
Arsh Kaushal
la source
6

Répondez simplement, vous pouvez utiliser comme ceci

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");
   }
}

la source
6

Essayez ce code ...

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);
}
code_geek
la source
1

Si vous voyez une page vide , activez JavaScript.

webView.setWebViewClient(new WebViewClient());
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setDomStorageEnabled(true);
webView.loadUrl(url);
CoolMind
la source