Projet

Général

Profil

Bug #8823

iOS: les liens vers les pages web ne s'ouvrent pas dans Safari

Ajouté par Serghei Mihai il y a plus de 8 ans. Mis à jour il y a environ 5 ans.

Statut:
Rejeté
Priorité:
Haut
Assigné à:
Version cible:
-
Début:
30 octobre 2015
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:

Description

Aucun des liens vers les pages web extérieures("Ecrire", Facebook, twitter, ...) ne s'ouvre dans un navigateur web


Fichiers

Historique

#2

Mis à jour par Serghei Mihai il y a plus de 8 ans

  • Assigné à mis à Ghislain Loaec
  • Priorité changé de Normal à Haut
#3

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.

#4

Mis à jour par Serghei Mihai il y a plus de 8 ans

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?

#5

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.

#6

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

#7

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...

#8

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

#9

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.

#10

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.

#11

Mis à jour par Serghei Mihai il y a plus de 8 ans

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

#12

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.

#13

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)

#14

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

#15

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.

#16

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 ?

#17

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

#18

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 ?

#19

Mis à jour par Serghei Mihai il y a plus de 8 ans

Oui, j'ai utilisé la dernier, 1.1.0

#20

Mis à jour par Thomas Noël il y a plus de 8 ans

Le 26 novembre 2015 à 13h52, 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.

#21

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.

#22

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).

#23

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.

#24

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)

#25

Mis à jour par Frédéric Péters il y a plus de 7 ans

Ce patch à Cordova, il peut être documenté ?

#26

Mis à jour par Serghei Mihai il y a plus de 7 ans

Si

#27

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)

#28

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.

#29

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".

#30

Mis à jour par Frédéric Péters il y a environ 5 ans

  • Statut changé de En cours à Rejeté

Formats disponibles : Atom PDF