WKWebView - Javascript Confirmer et d'Alerte ne fonctionne pas
Je suis en utilisant WKWebView de s'ouvrir example.com et là j'ai un lien de test qui est censé ouvrir une alerte JS, mais je ne peux pas l'obtenir à l'écran de l'appareil, il ne fonctionne que si je l'ai vue sur le site à partir du navigateur.
Je suis en utilisant WKUIDelegate, et a ajouté ce morceau de code dans le ViewController.swift fichier:
func webView(webView: WKWebView, runJavaScriptAlertPanelWithMessage message: String, initiatedByFrame frame: WKFrameInfo, completionHandler: (() -> Void)) {
NSLog("Hello")
}
Je ne vois rien dans la console de XCode, quand je clique sur le lien qui engendre la JS alerte.
Ce qui me manque?
OriginalL'auteur Mike Purcell | 2015-12-09
Vous devez vous connecter pour publier un commentaire.
Vous devez également définir la uiDelegate sur le WKWebView.
Pour
confirm()
etprompt()
voir les délégués d'autres méthodes.Oui, il fonctionne très bien pour moi. A votre contrôleur de votre UIDelegate ou avez-vous un objet séparé? Peut-être le délégué était libéré?
Vous êtes en mesure d'ouvrir natif js boîtes de dialogue avec ce code?
Oui. Si vous téléchargez un exemple de projet de Github, je peux prendre un coup d'oeil pourquoi il ne fonctionne pas pour vous.
Ce pas de travail pour wkwebview de evaluateJavaScript(), reportez-vous à ce post stackoverflow.com/q/43600624/6521116
OriginalL'auteur Onato
Un peu en retard mais je tiens à ajouter mon expérience pour référence future. La réponse de @Bon Bon m'a amené sur le chemin de la solution alors que j'essayais de faire fonctionner les choses avec Swift 3 et IOS 10, dans lequel cas, le code a besoin de quelques modifications.
Tout d'abord, vous devez mettre en œuvre aussi
WKUIDelegate
, afin de l'ajouter à laViewController
déclaration:Puis lorsque vous instanciez le
WKWebView
objet, comme par exemple comme ceci:vous devez également affecter la valeur correcte à la
uiDelegate
propriété de l'instance:Puis, finalement, vous pouvez utiliser le code fourni par @Bon Bon, mais notez qu'il existe quelques petites différences nécessaires par Swift 3, comme par exemple, le nom de la
presentViewController
méthode devientpresent
:Qui fait
alert
,confirmation
ettext input
pour travailler correctement à l'intérieurWKWebView
, sans aucun avertissement du compilateur en Xcode 8. Je ne suis pas un expert Swift programmeur, de sorte que toute observation utile à propos de l'exactitude du code serait très apprécié.Merci à vous @Bon Bon votre code d'origine, sans elle, j'aurais eu une longue nuit de travail!
preferredStyle: .alert
doit être définie pour les invite plutôtpreferredStyle: .actionSheet
- sans ce changement, j'obtiens une erreur en disant champ de texte peut être ajouté uniquement pour alerterIl semble prompt() échoue avec le signal SIGABRT pour moi l'utilisation de Swift 4, sauf si vous appliquez godblessstrawberry commentaire. @wiredolphin peut être bon de changer votre correction de réponse à utiliser preferredStyle: .alerte
OriginalL'auteur wiredolphin
Voici un exemple de code pour diverses alerte javascript, mise en oeuvre de Swift:
Il est tout au sujet de la conversion des info en javascript alert native INTERFACE utilisateur, et d'appeler la completionHandler() pour envoyer à l'utilisateur d'action de retour à moteur javascript.
J'avais besoin de la ligne suivante que j'ai mis comme une modification à cette réponse: alertController.popoverPresentationController?.sourceView = auto.vue
merci pour le commentaire. Il va certainement aider plus de gens 🙂
Avez-vous une question où l'application se bloque si vous essayez d'afficher plusieurs alertes à la fois? Fonctionne très bien sur iphone mais se bloque sur les iPads.
OriginalL'auteur John the Traveller