Android webView shouldOverrideUrlLoading pour les iframes
J'ai un site web local que Javascript est contrôlé et suis de le charger dans une WebView. Le site web est vraiment une page principale avec un iframe dont le contenu change en fonction de l'entrée utilisateur. Il y a un bouton "Suivant" sur la page principale qui s'exécute certaines fonctions javascript et décide de la page dans l'iframe (par l'entremise du document.getElement(...).src = )
En Android 2.1 les choses fonctionnent très bien simulée et sur le téléphone. La webview est le chargement de toutes les pages correctement.
Je l'ai testé sur un 2.2 téléphone et à chaque fois que je clique sur Suivant de la page (qui doivent être chargés dans l'iframe) est chargé dans le navigateur par défaut.
J'ai défini un filtre d'intention
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:scheme="file"
android:host="*"
android:pathPrefix="sdcard/Android/data/android.website/files/pages"
/>
</intent-filter>
en espérant qu'il redirige les requêtes de page à l'activité, mais il ne fonctionne pas. L'url est toujours chargées par le navigateur.
À l'aide de shouldOverredeUrlLoading ne fonctionne pas bien, parce que le lien qui est chargé est celui de la structure interne. J'ai essayé de chargement au lieu du code javascript qui définit que l'url de la src de l'iframe, mais n'a pas fonctionné.
C'est bizarre que cela ne se produit que sur la version 2.2 de téléphone. Dans un 2.2 de l'émulateur, il fonctionne très bien.
Des idées?
OriginalL'auteur Victor | 2011-07-21
Vous devez vous connecter pour publier un commentaire.
Essayer de fournir votre propre
WebViewClient
de WebView. Vous devez remplacershouldOverrideUrlLoading(..)
et retourfalse
.comment détecter si il châssis principal élément de l'enfant élément de cadre?
OriginalL'auteur Peter Knego
Android 4.x semble se comportent comme suit:
shouldOverrideUrlLoading
est appelée que lorsque l'ensemble de la page est sur le point de changer.L'iframe n'est qu'une partie de la page. Donc
shouldOverrideUrlLoading
n'est pas appelé.Primordial
public WebResourceResponse shouldInterceptRequest(WebView view, String url)
a fonctionné pour moi.Il semble y avoir aucune bonne façon d'arrêter de la
WebResourceResponse
. Vous pouvez charger une autre URL:OriginalL'auteur RhodanV5500
Juste confirmant que la substitution de la shouldOverideUrlLoading méthode (comme décrit ci-dessus) a travaillé pour moi aussi...il m'arrive d'être en utilisant phonegap, j'ai donc besoin de remplacer phonegap est GapViewClient objet comme indiqué ci-dessous. Même concept de base.
OriginalL'auteur elitz
Je crois shouldOverrideUrlLoading seulement est appelée pour la première URL de la page -- pas les iFrames. Découvrez onPageFinished (également dans le WebViewClient). Qui obtient généralement appelée pour chaque iFrame, bien que j'ai vu des différences de comportement entre Android 2.1 et 2.2.
Noter que onPageFinished revient vide, donc il n'y a aucun moyen de dire la WebView ne pas attirer l'image, et, dans tous les cas, il doit avoir attirée par ce point. Mais vous pouvez toujours surveiller les Url dans onPageFinished, puis quand vous verrez l'URL de l'intérêt, de masquer le WebView (où vous devrez peut-être passer à un autre point de vue) et de démarrer votre nouvelle activité.
OriginalL'auteur Torid