Ouvrir un lien HTML présent dans une webview dans une autre webview

Bonjour,

J’affiche du contenu HTML récupéré via un webservice dans une WebView (WKWebView). Concretement, j’ai une liste d’article, quand je clique dessus, l’article du site s’affiche et c’est mis en forme grace a du CSS. Tout l’affichage est bon mais j’ai du mal pour la gestion des liens.

Lorsque je clique sur un lien dans mon article (google.com par exemple), il s’ouvre mais dans cette même vue. Le probleme est que cette vue n’est pas du tout adaptée. Il faudrait que ce soit dans une autre webview qu’on puisse par exemple revenir dans l’article. Là actuellement, comme elle s’ouvre dans la même vue, quand je clique sur retour ca me renvoie vers la liste d’article.

Ma webviewvers laquelle je veux renvoyer le clique sur le lien existe dejà mais je ne sais pas comment ouvrir les liens des mes articles dans cette vue.

(j’utilise Swift/SwifTUI)

Merci d’avance

Bonjour,

J’ai du mal à voir le soucis, mais au niveau HTML pour envoyer le lien vers une cible, il faut utiliser l’attribut ‹ target › dans la balise <a>

Après, je me pose la question d’imbrication des webview…
Peut-être qu’il est préférable de plutôt lister les liens directement dans l’application et d’utiliser la webview uniquement pour afficher le contenu de la page?

Bonjour,

Merci pour ta réponse.

Pour mieux imaginer je vais donner l’exemple de l’appication d’actualité Le Monde:
AU demarrage il y a une liste d’articles
→ je clique su un titre qui m’emmenene vers le contenu de l’article. Cet article, c’est du contenu HTML mis en forme en utilisant WKWebView.
→ Dans cet article, il y a parfois des liens qui envoi vers une source par exemple. Quand on clique sur leur application le lien s’ouvre dans une autre vue qui est webView et qui fait office de navigateur dans leur app. Un bouton retour permet de revenir dans l’article.

Mon soucis actuel est que lorsque je clique sur le lien contenu dans mon article, le contenu s’affiche dans la vue de mon article, pas dans une autre. Du coup la navbar n’est pas du tout adaptée, et le bouton retour ne mene pas vers l’article mais vers la liste car pour iOS je suis toujours dans la vue de l’article.

Je ne vois pas trop comment contourner ce problème. Dans le sens ou c’est effectivement dépendant de la page web qui s’affiche dans la page.
à moins d’ouvrir la page directement dans le navigateur Safari, mais dans ce cas, cela fait sortir de l’app…

Ou alors, il faut revoir le concept/but de l’app au départ (pour mon avis, peut-être que d’autres auront des solutions à proposer?).

[EDIT] : Sinon peut-être en passant par ce genre de solutions ?

https://developer.apple.com/documentation/webkit/wknavigationdelegate

le contenu de l’article n’est pas une page web que je charge via un lien, c’est du contenu HTML que je mets en forme dans ma vue grace à WKWebView alors que lorsque je clique sur un lien dans l’article là à ce moment là ca doit charger le site via un lien.

Toutes les applications d’actualité le font, c’est quelque chose que l’on voit assez souvent.

Edit : oui j’ai vu la poste de Wknavigation Delegate mais je ne sais aps comment l’intégrer dans swiftUI

Je pense qu’il faut prendre le soucis dans l’autre sens dans ce cas.
Pourquoi le contenu est en HTML? Dans ce cas, il faut effectivement le traiter comme du web (puisque c’est du HTML, lien ou pas, c’est du langage web).
Peut-on au contraire en tirer un contenu sans HTML (en JSON par exemple?) via une API ou autre?

Qui envoie ce fichier HTML?

Si on prend l’application LeMonde comme exemple, il n’y a pas de WebView dans l’app pour les articles, elle oriente dans une webview uniquement pour les liens externes au site. L’intérêt de passer par une app, c’est justement de pas avoir à traiter tout comme une page web.

Je recupere les données via un webservice en json.
Il y a du balisage HTML à l’interieur mais ce n’est pas une page web complète. Le Monde utilise le même système. WKWebView permet de traiter le contenu HTML pour l’intégrer à l’app, rien d’exceptionnel tous les sites d’actualités font la même chose.
Le probleme n’est pas là à mon niveau, mon contenu s’affiche parfaitement

Merci pour la précision.
Je vais sécher sur ton soucis, je passe donc mon tour :sweat_smile:, j’espère que d’autres te proposeront d’autres solutions.

Bon courage à toi !

Merci.

J’ai compris qu’il fallait utiliser le Coordinator mais après je n’en sais pas plus.

Si tu arrives à extraire l’url du lien en question, tu te crées une View dont l’essentiel, dans le body, sera :
if url != nil{
Link(« message approprié », destination: url!)
}
Link et pas NavigationLink, c’est important. ton lien s’ouvrira dans le navigateur web par défaut, et il y aura en haut à gauche un lien sous la forme d’une flèche pour retourner à ton application. Cool, non ? Il ne te reste qu’à appeler cette View, myMagicView(url).

struct myMagicView{
var recup: String
url = URL(string: recup)
var body: some View{
if url != nil{
Link(« message approprié », destination: url!)
}
}
}

Et voilà. Récupérer les liens doit être faisable ?

Pour recuperer le lien c’est le même soucis, il faut utiliser le Cordinator.

Du coup après 2 jours de recherche j’ai reussi. je recupere le lien dans le corrdinator et je le fais passer dans ma vue grace a un @Binding et ensuite j’ouvre une SheetView

bien sur j’empeche que le lien s’ouvre de manière classique via le coordinator