Cordova - fenêtre.l'histoire.back() ne fonctionne pas sur le code HTML du bouton retour dans iOS 9
Dans mon application j'utilise fenêtre.l'histoire.de retour pour revenir à la Vue précédente
Déclaration de bouton de retour
<div class="back_icon" id="verification_back_icon"><a href="#" data-rel="back" data-transition="slidedown"><img src="images/back_btn.png" width="23"/></a></div>
Bouton d'action:
$("#verification_back_icon").on("click", function(e)
{
if(checkDirtyVacation())
{
e.preventDefault();
if(backbtnAlt== false)
{
backbtnAlt =true;
confirm("All data will be lost. Do you want to continue?",
function(r){
if(r){
//onBackKeyDown();
clearVacationvalues();
window.history.back();//this is not working in iOS 9
}else{
}
backbtnAlt =false;
});
}
}
else
{
e.preventDefault();
if($(".vaction_location").hasClass("chkSelect"))
{
$(".vaction_location").removeClass("chkSelect");
$(".vaction_location").addClass("chkUnSelect");
}
window.history.back();
}
});
Cela a fonctionné parfaitement jusqu'à iOS 8.4. Dans iOS 9 cette navigation n'est pas de travail.
Je suis en utilisant Apache Cordova native platform version 3.8.0
.
Si quelqu'un face au problème similaire, merci de me suggérer.
J'ai essayé avec l'histoire.de retour ne fonctionne pas sur iOS à l'aide de Cordova, mais pas de chance
Merci.
- Si votre "vue précédente" utilise des tables de hachage, alors votre problème est probablement dû au fait que l'établissement de
window.location.hash
est asynchrone est iOS 9 UIWebView - voir ici. Difficile de savoir sans plus de détails de ce cadre(s) que vous utilisez... - vous pour la réponse..s'il vous Plaît voir ma mise à jour de question
- À partir de votre extrait de code html, il vous regarde peut-être à l'aide de jQuery mobile? Si oui, quelle version? Si non, donner l'exemple de la façon dont vous naviguez entre les points de vue
- Oui je suis à l'aide de Jquery mobile version: jQuery Mobile 1.4.5 @daveAlden
Vous devez vous connecter pour publier un commentaire.
Le problème est que le réglage de
window.location.hash
est asynchrone dans l'iOS 9.0 UIWebview (utilisé par Cordova/Phonegap) - voir ce rapport de bug pour plus de détails.Cela provoque des problèmes lors de l'utilisation de jQuery Mobile qui utilise par défaut
window.location.hash
pour naviguer entre les "pages". Il provoque aussi des problèmes avec les popups/dialogues/sélectionner les menus qui utilisent ce mécanisme.Vous pouvez résoudre ce problème en empêchant jQuery Mobile automatiquement à partir de l'écoute/l'emplacement d'utilisation.hash:
Cependant, j'ai trouvé que cela avait des effets secondaires sur Android comme à l'origine le bouton de retour de ne pas travailler, j'ai donc ciblé spécifiquement au iOS 9 à l'aide de cordova-plugin-appareil:
Remarque que je suis en utilisant
navigator.app.backHistory()
paswindow.history.back()
en conjonction avechashListeningEnabled = false
- ce qui peut faire une différence.Alternativement, vous pouvez utiliser ce plugin pour utiliser le nouveau WKWebView sur iOS 8 et 9. WKWebView est utilisé par Safari sur iOS 8+, donc JQM sites affichées dans le navigateur sur iOS 9 ne rencontre pas ces problèmes. cordova-ios 3 utilise encore UIWebView en raison de un bug dans WKWebView dans iOS 8, mais la prochaine cordova-ios 4 soutiendra un WKWebView core plugin pour iOS 9+. Notez qu'il existe d'autres considérations lors de l'utilisation de WKWebView avec Cordova/Phonegap applications en raison de sa plus strictes de sécurité, telles que l'obligation de la SCRO-têtes sur XHR réponses.
SOLUTION:
Cette ligne résolu mon problème :
J'ai remplacé
window.history.back()
avechistory.go(0);
Maintenant il fonctionne très bien pour moi dans iOS 9
Dans index.html
Ajouter ceci dans le onDeviceReady fonction:
De Validation pour l'appareil version du système d'exploitation (comme
history.go(0)
est de travailler uniquement avec iOS 9) Avant iOS 9 versionwindow.history.back()
fonctionne parfaitementEt maintenant Ajouter ce bout de code à la place de la fenêtre.l'histoire.back()
Pour résoudre ce Message "impossible de charger une page web avec l'erreur: CDVWebViewDelegate: Navigation a commencé lorsque l'état=1" dans la console d'ajouter le code ci-dessous dans CDVWebViewDelegate.m
Méthode de Commentaire de ce morceau de code ci-dessous:
La désactivation de pousser l'état a fonctionné pour moi:
$.mobile.pushStateEnabled = false;
Je pense que c'est l'Une balise par défaut de l'action provoque le bug. Je viens donc de prévenir l'action par défaut en ajoutant
return false
à la fin de la fonction de gestionnaire de clicEt il fonctionne.
<a id="back-btn">back</a>
javascript
@Sujania,
Selon la phonegap équipe, iOS9 n'est pas officiellement en charge. Ce problème peut être encore un autre bug dans iOS9. Vous pourriez avoir à attendre un correctif.
PhoneGap Build iOS 9 Statut de Support
http://community.phonegap.com/nitobi/topics/phonegap-build-ios-9-support-status
À ce point dans le temps, 4 bugs sont signalés à l'Cordova Bug référentiel. Votre question n'apparaît pas dans la respository - à compter de cette date.
https://issues.apache.org/jira/browse/CB-9684?jql=text%20~%20%22iOS9%22
Essayer cette