2012-10-27 6 views
1

Sur un HTC Evo fonctionnant sous Android 2.3.5, overrriden shouldOverrideUrlLoading() n'est jamais appelé. Le même code fonctionne très bien sur un Samsung Galaxy fonctionnant sous Android 2.3.6. Jusqu'ici, j'ai essayé de remplacer onPageStarted() et onPageFinished(). Je ne vois pas l'URL dans ces méthodes.Android: overriding shouldOverrideUrlLoading ne fonctionne pas sur les appareils HTC

Mon intention est de fournir des activités personnalisées pour les liens mailto: et tel: présents dans la page. Des idées sur la façon dont je peux faire ce travail si shouldOverrideUrlLoading() n'est jamais touché?

J'ai déjà regardé des questions similaires sur stackoverflow et ailleurs, n'ai rien trouvé de pertinent.

+0

[a de] utilisateur (http://stackoverflow.com/questions/9670136/shouldoverrideurlloading-gets-called-only-for-some- les pages Web). Le problème semblait être la fonction js setTimeout (fn, millis). Vous avez écrit une fonction js qui le remplace, puis recréer le comportement de cette fonction dans votre code Android (en utilisant JavascriptInterface) comme il convient le mieux pour votre application. C'est beaucoup de travail qui dépend de la fonctionnalité de votre application, mais cela fonctionne. L'idée est de surcharger setTimeout puis d'appeler une méthode à partir du code android qui dort le fil pour combien de millis étaient dans l'appel initial de la setTimeout en js .. –

+0

Merci pour votre commentaire. Je vais essayer; mais Javascript pourrait ne pas être une solution acceptable. Je regarde aussi http://stackoverflow.com/questions/5116909/how-i-can-get-onclick-event-on-webview-in-android – Chaitanya

Répondre

2

shouldOverrideUrlLoading() ne fonctionne pas seulement sur certaines versions d'Android, comme 2.1 ou 2.3.6 mais cela fonctionne très bien sur 2.3.3, 2.3.5, 4.0.2 ou 4.0.3.

Si vous devez gérer en cliquant sur un lien sur le webview, vous devez utiliser la méthode shouldOverrideUrlLoading(). Si vous avez seulement besoin de gérer le chargement d'une page Web, vous devez utiliser onPageStarted().

Ceci est android lien développeur: https://developer.android.com/guide/webapps/migrating.html

  • Note: Ex: nous avons 2 liens sur la page Web.

    1. <a href="http://www.w3schools.com/">Visit W3Schools!</a>
    2. <a href="http://www.w3schools.com/" target="_blank">Visit W3Schools!</a>

shouldOverrideUrlLoading() n'est appelée lorsque l'utilisateur clique sur le lien "1". et il n'est pas appelée lorsque cliquer sur le lien « 2 »

public void onPageStarted(WebView view, String url, Bitmap favicon) { 

    if (url.contains("success")) { 
     Intent intent = new Intent(WebviewActivity.this, OrderConfirmActivity.class); 
     intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     startActivity(intent); 
    } else { 
     super.onPageStarted(view, url, favicon); 
    } 
} 
+0

Je ne comprends pas pourquoi le 'si (url.contains ("succès")) 'fonctionne. Pourriez-vous l'expliquer? – acrespo

+0

"succès" seulement est hard-code. Ex: votre URL: https://google.com/login/success. –

Questions connexes