Je veux accéder / effacer la liste arrière de l'avant comme si le J'ai essayé: p> mais qui gelera le dispositif (simulateur aussi). P> < / p> uiwebview code> est nouveau. Existe-t-il une API publique ou une solution de contournement pour faire cela?
8 Réponses :
J'imagine que vous pouvez briser l'historique en chargeant manuellement certains HTML ...
Quelque chose comme: p>
Salut Colin, merci pour votre réponse. Malheureusement, j'aurais toujours besoin de revenir à la première page de la liste pour le faire. Même alors, il ne remplacera que les pages après la première. Laissant le poing là-bas
Il n'y a pas de méthode officielle em> pour le faire dans le SDK. Toutefois, si vous voulez vraiment effacer l'historique arrière / avancement d'un une façon rapide et sale de le faire (Complet avec un groupe d'avertissements de compilateur laids) est le suivant: p> étant donné que
Comme avec quelque chose comme ça, gardez à l'esprit que les résultats ne peuvent pas le faire via l'approbation de l'App Store et ne pas fonctionner à tous avec les futures révisions du SDK. em>
uiwebview code>, il peut être fait avec un peu de DLOW dans les cadres privés. P>
myUIWebViewInstance code> est une instance parfaitement normale de
uiwebview code>: p>
id internalWebView=[[myUIWebViewInstance _documentView] webView];
[internalWebView setMaintainsBackForwardList:NO];
[internalWebView setMaintainsBackForwardList:YES];
Code très sournois! Nous voulons que l'application se renseigne dans l'App Store afin que cela ne profite pas. Marquer correctement parce que vous avez dit qu'il n'y avait pas de chemin officiel. Dommage
Nul doute à ce sujet, j'ai été rejeté aujourd'hui pour utiliser ce code exact.
Apple vient de rejeter une de mes applications pour utiliser ce cadre privé.
[InternalwebView SetMainTainsBackForwardList: Non]; SetMainTainsBackForwardList méthode introuvable :(
Si vous essayez de "réutiliser" une UIWebView existante et désactivez la capacité de revenir à la page précédente, vous pouvez: P>
Lors du chargement de la nouvelle demande (celui que l'utilisateur ne doit pas revenir à partir de), enregistrez l'URL de la nouvelle demande, par exemple: P>
Je suppose que vous avez votre propre bouton de retour, donc sur votre méthode WebViewDidDinishloadLoadloadloadloadloadload La méthode, ajoutez: p>
De cette façon, l'utilisateur ne saura même pas que l'UIWebView peut revenir à la page avant. P> self.cururl = [nsurl urlwithstring: @ "http://www.bla.com"];
[WebView LoadRequest: [Nsurlrequest DemandeWithURL: Cururl]]; Code> P> Li>
backbttn.enabled = webview.cangoback &&! [[[[webview.request URL] isequal: cururl]; code> p> l> l>
ol>
Je vois ce que tu veux dire, mais je suppose que cela ne correspond pas exactement à ma situation. Ce serait certainement la bonne réponse pour si je ne pouvais pas désactiver la capacité de revenir. Ma situation est que je dois mettre l'UIWebView à son URL racine afin que je puisse afficher une barre d'outils pour y accéder et avoir une barre d'outils séparée pour toutes les URL en dessus. Merci quand même pour vôtre aide!
Grande solution dans la plupart des cas. Semble casser lorsque l'URL redirige. Vaut toujours la peine de voter!
J'ai réussi (autant que vous puissiez appeler une telle solution "réussie") à l'aide de la ligne de code suivante: où Ce qu'il fait est de dire au navigateur d'aller aussi loin à l'envers que l'historique va, puis, après une courte période, chargez l'URL souhaitée. < / p> Ceci, bien sûr, ne résout pas le problème de l'élimination de l'historique avancé (que je n'avais pas besoin dans mon cas). P> P> terneLocation code> est le souhaité URL en tant que
nstring code>. P>
Malheureusement, cela ne fonctionnera pas si la navigation de retour / avancement programmatique a été utilisée avant: dans ce cas historique.length code> n'est plus synchronisé avec la pile d'historique réelle et affichera le nombre de navigation utilisateur ( en cliquant sur les liens) Pages.
history.length code> sera généralement plus grand que le nombre de pages que vous pouvez revenir en arrière et
historique.go (historique.length-1) code> est hors limites et échouera tranquillement .
Je pense que si vous libérez l'objet UIWebView et recréez, alors cela effacerait l'historique. J'ai en fait un problème inverse. Mon objet UiWebView est automatiquement publié lors de l'événement de mémoire faible s'il s'agit d'une vue non visible. Je dois ensuite le recréer dans la vue ViewDidLoad, mais cela ne conserve pas l'historique de ce point. P>
Ramassage de l'approche intelligente de Gilbert: s'il est modifié, il fonctionne avec les redirections (quelque chose qu'il n'est pas capable jusqu'à présent, car MHarper a souligné).
Avant de charger la demande, enregistrez l'URL souhaitée et définissez un booléen. Variable de membre appelé ( Les appels de retenue et de libération ne seront bien sûr pas nécessaires en cas de compilation dans un environnement de comptage automatique de référence (ARC).) P> maintenant dans le (à nouveau, conserver et libérer ne sont pas nécessaires avec ARC activé.) P> Cependant, il y a un inconvénient clé de cette méthode. Cela ne fonctionne que si vous savez certainement que l'URL est passée dans Mise à jour: vous pouvez améliorer cette méthode en supprimant tout ce qui traite avec _desiredurl, ce qui signifie que vous n'enregistrez pas le message souhaité. URL dans _saveurl code> pour indiquer que l'URL de redirection doit être enregistrée (vous verrez l'utilisation exacte de ces deux variables ultérieurement): p>
-WebViewDidFinishloadload: code> Délégué rappel, vérifiez à Voir si la redirection a déjà eu lieu en testant si l'URL de la demande actuelle de la vue Web diffère de l'URL souhaitée. Si tel est le cas, enregistrez l'URL de redirection dans une variable de membre
_firsturl code>. C'est aussi où
_savurl code> se met en place. Il est d'éviter toute écrasement
_firsturl code> chaque fois que cette méthode de délégation est appelée.
Également, activez ou désactivez les boutons arrière et avant simplement comme nous l'avons fait auparavant. P>
my_loadurl: code> redirigera. Sinon, la variable
_firsturl code> sera définie quelque peu d'autre. Donc, si vous ne pouvez pas dire si l'URL Selon redirigera, cette approche ne correspond pas à vos besoins. Quoi qu'il en soit, cela a répondu à mes besoins et j'espère pouvoir aider quelqu'un d'autre aussi. P>
-My_LoaderL: code> et in
-WebViewDidDinishload: code> Dites simplement
si (_savurl) code>. De cette façon, cela fonctionnera pour des sites Web qui ne se redirrent pas du tout ou qui redirigent instantanément. P> P>
J'ai essayé presque toutes les solutions postées sans succès. Mon cas est destiné au plug-in Childbrowser PhoneGap, mais est basé dans le même problème, une seule instance WebView utilisée pour afficher des pages externes dans mon application. Lorsque je montre une page externe, la View WebView conserve l'historique des pages précédentes présentées. Je voulais supprimer l'histoire lorsque je montrais une nouvelle page Web externe.
Après quelques recherches, j'ai trouvé une solution dans ce type POST qui a fonctionné pour moi. p>
[webView stringByEvaluatingJavaScriptFromString:@"document.body.innerHTML = \"\";"];
Recréez simplement le webview. Cela réinitialiserait tout, y compris l'histoire. P>
J'ai essayé cela, mais pour une raison quelconque, cela conduit à ralentir les temps de chargement ....
Il efface également la cache que vous ne voulez parfois pas faire. Par exemple, lorsque vous souhaitez conserver le contenu d'un panier d'achat.
Que voulez-vous dire en recréant le webivew? faire alloc et init à nouveau