Bug #8823
iOS: les liens vers les pages web ne s'ouvrent pas dans Safari
0%
Description
Aucun des liens vers les pages web extérieures("Ecrire", Facebook, twitter, ...) ne s'ouvre dans un navigateur web
Fichiers
Historique
Mis à jour par Serghei Mihai il y a plus de 8 ans
- Assigné à mis à Ghislain Loaec
- Priorité changé de Normal à Haut
Mis à jour par Thomas Noël il y a plus de 8 ans
En fait, les liens ne s'ouvrent pas du tout... on clique, et rien ne se passe.
Mis à jour par Serghei Mihai il y a plus de 8 ans
- Fichier 0001-set-the-correct-href-for-external-urls.patch 0001-set-the-correct-href-for-external-urls.patch ajouté
Le seul moyen que j'ai trouvé pour ouvrir les liens dans Safari c'était de modifier le fichier MainViewController.m dans Xcode en y rajoutant la fonction
- (BOOL)webView:(UIWebView *)theWebView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType) navigationType { NSURL *url = [request URL]; // Intercept the external http requests and forward to Safari.app // Otherwise forward to the PhoneGap WebView if ([[url scheme] isEqualToString:@"http"] || [[url scheme] isEqualToString:@"https"]) { [[UIApplication sharedApplication] openURL:url]; return NO; } else { return [ super webView:theWebView shouldStartLoadWithRequest:request navigationType:navigationType ]; } }
ainsi qu'en modifiant le index.html
comme dans le patch joint.
Ca fonctionne sur l'iPhone.
Ghislain, ton avis?
Mis à jour par Frédéric Péters il y a plus de 8 ans
Pour référence ce code ne sort pas de nulle part mais de https://gist.github.com/monkeymonk/d16b1e4408e155d07e5b (il est plus lisible là-bas).
Quel comportement sur une page qui n'a pas external=true, dont le souhait est qu'elle se charge en <iframe> ? (la page "plan de la ville" est ainsi).
Par ailleurs il n'est pas possible que l'environnement de build dépende d'un patch copié/collé dans redmine; il faudra mettre un clone de phonegap avec ce patch dans un dépôt à nous. Et ça devient un boulot supplémentaire d'en gérer les mises à jour.
Mis à jour par Ghislain Loaec il y a plus de 8 ans
J'ai oublié mes pommes devices ce matin, je vais chercher tout ça à midi pour faire quelques tests. Mais normalement, il n'est pas nécéssaire de toucher au code ObjectiveC, il existe de plugins phonegap qui fonctionnaient très bien avant. J'ai dû faire sauter quelque chose quand j'ai bidouillé les plugins. Je regarde ça tout à l'heure ;)
Mis à jour par Thomas Noël il y a plus de 8 ans
Salut Ghislain,
Ghislain Loaec a écrit :
J'ai oublié mes pommes devices ce matin, je vais chercher tout ça à midi pour faire quelques tests. Mais normalement, il n'est pas nécéssaire de toucher au code ObjectiveC, il existe de plugins phonegap qui fonctionnaient très bien avant. J'ai dû faire sauter quelque chose quand j'ai bidouillé les plugins. Je regarde ça tout à l'heure ;)
Tu as une piste ? De notre côté on sèche, complétement...
Mis à jour par Ghislain Loaec il y a plus de 8 ans
C'est quand on est passé à phonegap 5 que ca a tout pété, j'avais bien mis les balises "whitelist", mais il semblerait que j'ai manqué qqchose, je creuse :
https://github.com/jessemonroy650/top-phonegap-mistakes/blob/master/whitelist-system.md
Mis à jour par Serghei Mihai il y a plus de 8 ans
- Assigné à changé de Ghislain Loaec à Serghei Mihai
On vient de discuter avec Ghislain au téléphone.
Ghislain n'est pas parvenu à ouvrir des liens à partir de la webview.
On n'a pas d'autres idées que de patcher le fichier Xcode pour builder l'application.
Mis à jour par Victor Claudet il y a plus de 8 ans
Et donc si c'est la seule solution pour soumettre demain. Je dis Go.
Et on se prive pas de faire les choses proprement ensuite et mettre l'application à jour quand on y voit plus clair.
Mis à jour par Serghei Mihai il y a plus de 8 ans
- Fichier 0001-set-the-correct-href-for-external-urls-8823.patch 0001-set-the-correct-href-for-external-urls-8823.patch ajouté
- Statut changé de Nouveau à En cours
- Patch proposed changé de Non à Oui
Mon patch précedent refait pour que les liens s'ouvrent également dans le navigo sous Android.
Cela ne s'applique pas à iOS.
Build à tester disponible sur: http://perso.entrouvert.org/~smihai/mymeaux/android-debug.apk
Mis à jour par Frédéric Péters il y a plus de 8 ans
On devrait vraiment en profiter pour documenter les choses.
On traitait avant uniquement des liens de la forme href="#{%= o.id %}", et ça amenait la fonction navigate() à s'exécuter, et si l'objet pointé était marqué "external", ça appelait app.utils.openExternalURL().
Maintenant, quand c'est noté "external", ça devient directement l'URL, o.url, et ça se combine avec un patch à MainViewController.m.
Et ça c'est l'histoire du premier patch.
Dans le second, il y a ajout, pour les liens "external", d'un target="_system" qui doit sous Android ouvrir dans le navigateur système (c'est un peu flippant que le deuxième lien dans mes résultats est "In my experience this doesn't work: links are still opened in the Cordova wrapper.").
Les fonctions onExternalLinkClick et openExternalURL n'étant plus utilisées, elles sont supprimées.
Mis à jour par Victor Claudet il y a plus de 8 ans
je vous laisse décider de la meilleure solution technique :-)
Mais ça fonctionne sur android. Les liens s'ouvrent bien dans le navigateur.
je rappelle la chose suivante évoquée dans le ticket #8985 :
Mais attention, cette nouvelle version modifie l'affichage de certains éléments.
Par défaut, la barre de notification en haut de l'écran et les boutons natifs (retour arrière, retour à l'accueil...) disparaissent. L'application est affichée en plein écran. Pour retrouver les boutons et la barre il faut glisser le doit de haut en bas ou de bas en haut en limite d'écran. (je sais pas expliquer autrement)
Mis à jour par Benjamin Dauvergne il y a plus de 8 ans
Est-ce que quelqu'un a regardé du coté du plugin InAppBrowser1 qui semble indiquer pour gérer les liens externes un peu partout2 ?
1 https://github.com/apache/cordova-plugin-inappbrowser
2 http://weblog.west-wind.com/posts/2015/Jul/02/External-Links-in-Cordova-for-iOS
Mis à jour par Serghei Mihai il y a plus de 8 ans
Oui et sous Safari même en essayant d'ouvrir l'url cordova.inAppBrowser.open
ça reste dans la webview.
Android ouvre un navigateur.
Mis à jour par Benjamin Dauvergne il y a plus de 8 ans
En mettant '_system' ou '_blank' dans l'appel à cordova.inAppBrowser.open ça ne marche toujours pas ? C'est bizarre parce que la lib a l'air activement maintenue. Avec quelle version d'iOS/Safari testes tu ?
Mis à jour par Serghei Mihai il y a plus de 8 ans
Ni _blank
, ni _system
n'ont pas d'effet sur le iOS 9.1 de l'iPhone
Mis à jour par Benjamin Dauvergne il y a plus de 8 ans
Dans le fichier config.xml je vois qu'on référence la version 0.5.2 de inappbrowser, la dernière c'est la 1.0.1, ça pourrait jouer ? Ou c'est la dernière version qui est utilisée automatiquement ?
Mis à jour par Thomas Noël il y a plus de 8 ans
Le 26 novembre 2015 à 13h52, redmine@entrouvert.com a écrit :
En mettant '_system' ou '_blank' dans l'appel à cordova.inAppBrowser.open
ça ne marche toujours pas ? C'est bizarre parce que la lib a l'air
activement maintenue. Avec quelle version d'iOS/Safari testes tu ?
On fait toujours tout avec les dernières versions (iOS, safari, xcode,
cordova...). Mais les différences entre les documentations Cordova et les
résultats obtenus sont (très) nombreuses.
Mis à jour par Benjamin Dauvergne il y a plus de 8 ans
Je suis quand même embêté car même si iOS 9.1 n'a qu'un mois je ne trouve pas de bugreport sur ce point dans le jira de cordova. Faudrait peut-être tester un projet plus simple (voir http://stackoverflow.com/questions/33874702/phonegap-build-window-open-not-working), voir si ça marche et remonter vers ce qu'on fait en terme d'option dans le config.xml (à lire pas mal de post j'ai l'impression que ça tourne souvent autour de ça).
Là notamment comme différence je vois un allow-intent plus souple et un allow-navigation absent de notre config.xml.
Mis à jour par Benjamin Dauvergne il y a plus de 8 ans
Aussi par défaut avec inAppBrowser version iOS la barre de navigation est en bas (j'ai vu un rapport stackoverflow où la personne pensait que ça ne marchait pas alors que la barre était en bas).
Mis à jour par Serghei Mihai il y a environ 8 ans
- Statut changé de En cours à Fermé
Je ferme car aucune autre piste pour l'instant et la modification du code Xcode fonctionne.
Mis à jour par Serghei Mihai il y a plus de 7 ans
Je viens de retester le dernier patch proposé. Ça fonctionne par défaut sous Android et avec la modification dans le fichier MainViewController.m
du projet Xcode.
Je pousse le patch.
commit 7089380db2bdcb35e9a09341d6d33c3c6f7ad4dc Author: Serghei MIHAI <smihai@entrouvert.com> Date: Mon Nov 2 07:45:25 2015 +0100 set the correct href for external urls (#8823)
Mis à jour par Frédéric Péters il y a plus de 7 ans
Ce patch à Cordova, il peut être documenté ?
Mis à jour par Serghei Mihai il y a plus de 7 ans
- Fichier 0001-update-doc-for-iOS-build-8823.patch 0001-update-doc-for-iOS-build-8823.patch ajouté
- Statut changé de Fermé à En cours
Si
Mis à jour par Frédéric Péters il y a plus de 7 ans
Ça pourrait être, genre, un patch ? (+ il y a un "need specific code to add to " qui traine)
Mis à jour par Serghei Mihai il y a plus de 7 ans
Frédéric Péters a écrit :
Ça pourrait être, genre, un patch ?
Un patch à appliquer au fichier MainViewController.m
? La tête de ce fichier depend de la version cordova avec lequel il a été généré et le patch pourrait ne pas s'appliquer toujours.
Mis à jour par Frédéric Péters il y a plus de 7 ans
Oui, un patch contre le fichier. Genre produit avec diff. Ou avec git format-patch. Je préfère nettement ça à un "allez ajouter au bout du fichier".