Question

Je l'ai chargé une URL externe dans mon WebView. Maintenant, ce que j'ai besoin est que lorsque l'utilisateur clique sur les liens sur la page chargée, il doit travailler comme un navigateur normal et ouvrir le lien dans la même WebView. Mais il est d'ouvrir le navigateur par défaut et chargement de la page il?

J'ai activé JavaScript. Mais encore il ne fonctionne pas. Ai-je oublié quelque chose?

Était-ce utile?

La solution

Si vous utilisez un WebView vous devrez intercepter les clics vous-même si vous ne voulez pas le comportement par défaut Android.

Vous pouvez suivre les événements dans un WebView en utilisant un WebViewClient . La méthode que vous voulez est de WebView dans le SDK il y a un exemple qui Est-ce que tout ce que vous voulez. Il est aussi simple que:

private class HelloWebViewClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return true;
    }
}

Autres conseils

dans certains cas, vous pourriez avoir besoin d'un remplacement de onLoadResource si vous obtenez une redirection qui ne déclenche pas la méthode de chargement url. dans ce cas, j'ai essayé les éléments suivants:

@Override
public void onLoadResource(WebView view, String url)
{
    if (url.equals("http://redirectexample.com"))
    {
        //do your own thing here
    }
    else
    {
        super.onLoadResource(view, url);
    }           
}

dit, cliquez sur un lien dans une WebView sera demande de lancement qui gère les URL. Vous devez remplacer ce comportement par défaut

    myWebView.setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            return false;
        }
    });

ou s'il n'y a pas de logique conditionnelle dans la méthode simplement faire

myWebView.setWebViewClient(new WebViewClient());

Ajoutez cette 2 lignes dans votre code -

mWebView.setWebChromeClient(new WebChromeClient()); 
mWebView.setWebViewClient(new WebViewClient());

La méthode boolean shouldOverrideUrlLoading(WebView view, String url) a été désapprouvée dans l'API 24. Si vous soutenez de nouveaux périphériques, vous devez utiliser boolean shouldOverrideUrlLoading (WebView view, WebResourceRequest request).

Vous pouvez utiliser les deux en faisant quelque chose comme ceci:

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
    newsItem.setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
            view.loadUrl(request.getUrl().toString());
            return true;
        }
    });
} else {
    newsItem.setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }
    });
}

Arulx la réponse Z était exactement ce que je cherchais.

J'écris une application avec tiroir avec navigation recyclerview et webviews, pour maintenir la navigation sur le Web à l'intérieur de l'application indépendamment des hyperliens clicked (donc pas de lancer le navigateur Web externe). Pour cela, il suffit de mettre les 2 lignes de code suivantes:

mWebView.setWebChromeClient(new WebChromeClient()); mWebView.setWebViewClient(new WebViewClient());

exactement sous votre déclaration WebView.

Voici un exemple de mon code mis en œuvre WebView:

public class WebView1 extends AppCompatActivity {

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

    WebView wv = (WebView) findViewById(R.id.wv1); //webview statement
    wv.setWebViewClient(new WebViewClient());    //the lines of code added
    wv.setWebChromeClient(new WebChromeClient()); //same as above

    wv.loadUrl("http://www.google.com");
}}

De cette façon, chaque lien cliqué sur le site se charge dans votre WebView. (Android Studio 1.2.2 avec tous les SDK mis à jour)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top