L'utilisation de Javascript pour remplacer ou de désactiver la balise meta refresh
J'ai un site web, où je suis en train d'utiliser Ajax pour mettre à jour certaines choses sur la page sans la recharger. Cependant, il ya une bonne chance que la plupart de mes utilisateurs seront en utilisant les navigateurs qui ne prennent pas en charge Javascript, donc je suis en train de concevoir la page avec les balises meta refresh, qui en quelque sorte de travail uniquement pour les utilisateurs sans Javascript. Est-il possible de faire cela?
J'ai essayé de mettre la balise à l'intérieur d'un élément noscript, mais mon primitive de téléphone cellulaire navigateur ne serait pas le reconnaître. Je pense peut-être mettre un cookie pour mémoriser si le navigateur de l'utilisateur prend en charge Javascript ou avoir une version de la page qui fonctionne sans Javascript, et tente de l'utiliser Javascript pour rediriger l'utilisateur vers une version plus sophistiquée, mais je me demande si il y a une façon plus élégante de le faire. Quelqu'un a une idée?
- Je pense que j'ai appris de cette question que ce que je suis en train de faire est beaucoup d'ennuis et probablement pas la peine de dépenser de l'effort et de traiter de tous les problèmes. Je pense que je peut rediriger comme Hrishi suggéré, ou si je veux le Javascript et non-Javascript des pages à utiliser la même Url, je ne peut utiliser les balises meta refresh si l'utilisateur choisit de les activer, et n'oubliez pas le choix de l'utilisateur à l'aide des cookies. Merci pour toutes vos réponses.
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas remplacer balise meta refresh avec JavaScript.
Cependant, vous pouvez le faire
Supposons que votre page est-à ->
http://example.net/mike.html
Placez le code suivant y->
window.onbeforeunload = function() { return 'test' };
, vous pouvez afficher une fenêtre et cliquez sur "Rester sur cette page" pour interrompre l'actualiser. C'est un terrible choix à partir d'un UX point de vue, mais c'est un hack qui s'arrête à l'actualisation.J'ai trouvé que la balise noscript fonctionne très bien pour cela. Par exemple, vous pouvez placer ce juste après que vous près l'élément de tête:
Pas besoin de retirer la balise meta avec un script, depuis un navigateur qui a un support pour le script ignorera tout à l'intérieur de l'élément noscript.
Malheureusement, à partir de @bluesmoon réponse, manipulation du DOM ne fonctionne plus.
La solution de contournement consiste à récupérer l'original de balisage, de rechercher et de remplacer le meta refresh élément, puis écrire le nouveau document avec le remplacement du balisage.
Je ne suis pas sûr de la façon de récupérer l'original de balisage à l'aide de JavaScript, sauf pour envoyer une requête supplémentaire à l'aide de
XMLHttpRequest
.À l'Opéra, voici ce que j'utilise:
Disable meta refresh 1.00.js
:Opéra dispose également d'une fonctionnalité intégrée qui désactive la méta rafraîchit. Pas besoin de JavaScript.
Il suffit de retirer la balise meta avec javascript:
Je l'ai fixé le délai d'actualisation de 2 secondes au-dessus de tout comme un exemple. Vous pourriez probablement vous en sortir avec 1 seconde, mais ne pas le mettre à 0, parce que le javascript n'obtiendrez pas une chance de s'exécuter dans ce cas. 0 est également ennuyeux car il se casse le dos-bouton de convivialité.
Modifier 2012-10-23 Cela ne semble pas fonctionner plus. Le nœud est toujours supprimé, mais il semble que les navigateurs analyser et maintenez-le en mémoire de toutes les balises meta de toute façon.
Les balises Meta sont affreux dans ce cas. Ce sur les moteurs de recherche??
Ce que vous devez faire est de faire quelque chose comme je l'ai déjà indiqué ici.
Vos liens doivent pointer vers plein de sites de travail comme s'il s'agissait d'un web 2.0 page. Puis avec les gestionnaires d'événements (onclick) vous permettent d'améliorer l'expérience de l'utilisateur en utilisant ajax.
Donc ajax utilisateurs ne pourront pas aller à lien, le lien est plutôt traitée lorsque l'utilisateur clique dessus et envoyé une requête ajax vers la même url, mais avec un ajax paramètre GET.
Maintenant du côté serveur, vous devez être en mesure de générer l'ensemble du site, par une méthode. Si c'est une requête ajax vous envoyer le contenu connexe. Si elle n'est pas une requête ajax, yo générer l'intégralité du site avec la partie relative à la intégré.
Votre site sera SEO friendly, disponible pour les utilisateurs mobiles, et progressivement renforcé pour les personnes sur les navigateurs et plates-formes. Enfin ajax de hachage généré liens seront utilisables, de même que des liens.
Awesomeness. 🙂
Cela a fonctionné pour moi merveilleux! (essayé dans google chrome)
Je suis d'accord que l'actualisation des métafichiers n'est pas la bonne voie à suivre ici. En plus de galambalazs lien, de la recherche sur "amélioration progressive".
Cependant, dans l'esprit de répondre à la question, vous pouvez essayer ce qui suit. Il est non testé, peut ne pas fonctionner dans tous les navigateurs, mais devrait être dans le bon sens:
Si suppression il pourrait arrêter le navigateur de rafraîchissant dans le temps reste à voir.
in
opérateur effectue une itération sur les touches d'un objet. Dans ce cas, vous devez utiliser un numérique en boucle:for(i=metaTags.length-1; i>=0; i--) { ... }
Vous parcourez en arrière parce que un removeChild va changer metaTags.longueurCeci est un exemple de ce que j'utilise et il fonctionne parfaitement (surtout sur Firefox)!