Utilisation de Javascript pour remplacer ou désactiver la balise de mise à jour de méta

J'ai un site Web, où j'essaie d'utiliser Ajax pour mettre à jour certaines choses sur la page sans la recharger. Cependant, il y a de bonnes chances que beaucoup de mes utilisateurs utilisent des navigateurs mobiles qui ne prennent pas en charge JavaScript, alors j'essaie de concevoir la page avec des balises de méta-rafraîchissement, qui fonctionnent en quelque sorte uniquement pour les utilisateurs sans Javascript. Est-ce qu'il y a un moyen de faire ça?

J'ai essayé de mettre la balise dans un élément de noscript, mais mon navigateur de téléphone cellulaire primitif ne le reconnaitrait pas. Je pense peut-être configurer un cookie pour me rappeler si le navigateur de l'utilisateur supporte Javascript, ou avoir une version de la page qui fonctionne sans Javascript, et essaie d'utiliser Javascript pour rediriger l'utilisateur vers une version plus sophistiquée, mais je me demande si Est un moyen plus élégant de le faire. Quelqu'un a-t-il une idée?

Vous ne pouvez pas remplacer la balise de mise à jour de méta avec JavaScript.

Cependant, vous pouvez le faire

Supposons que votre page soit à ->

http://example.net/mike.html Placez le code suivant->

<script type="text/javascript"> window.location = 'http://example.net/mike/for_Those_With_JavaScript_Enabled.html'; </script> 

J'ai trouvé que la balise noscript fonctionne très bien pour cela. Par exemple, vous pouvez le placer juste après la fermeture de l'élément principal:

 <noscript> <meta http-equiv="refresh" content="5;URL=http://www.example.com"> </noscript> 

Pas besoin de supprimer la méta-étiquette avec un script, car un navigateur qui a un support de script ignorera tout dans l'élément noscript.

Malheureusement, à partir de la réponse @ bluesmoon , la manipulation du DOM ne fonctionne plus.

La solution de contournement consiste à récupérer le balisage d'origine, à trouver et à remplacer l'élément de méta-rafraîchissement, puis à écrire le nouveau document avec le balisage remplacé.

Je ne suis pas sûr de savoir comment récupérer le marquage d'origine en utilisant JavaScript, sauf pour envoyer une demande supplémentaire en utilisant XMLHttpRequest .

Dans Opera, voici ce que j'utilise:

Disable meta refresh 1.00.js :

 // ==UserScript== // @name Disable meta refresh // @version 1.00 // @description Disables meta refresh. // @namespace https://stackoverflow.com/questions/3252743/using-javascript-to-override-or-disable-meta-refresh-tag/13656851#13656851 // @copyright 2012 // @author XP1 // @homepage https://github.com/XP1/ // @license Apache License, Version 2.0; http://www.apache.org/licenses/LICENSE-2.0 // @include http*://example.com/* // @include http*://*.example.com/* // ==/UserScript== /* * Copyright 2012 XP1 * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /*jslint browser: true, vars: true, maxerr: 50, indent: 4 */ (function (window, XMLHttpRequest) { "use strict"; if (window.self !== window.top) { return; } window.stop(); var uri = window.location.href; var request = new XMLHttpRequest(); request.open("GET", uri, false); request.send(null); if (!(request.readyState === 4 && request.status === 200)) { return; } var markup = request.responseText; markup = markup.replace(/<meta http-equiv="refresh".*\/?>/gi, ""); var document = window.document; document.open(); document.write(markup); document.close(); }(this, this.XMLHttpRequest)); 

Opera dispose également d'une fonctionnalité intégrée qui désactive les méta-rafraîchissements. Pas besoin de JavaScript.

  • Cliquez avec le bouton droit de la souris sur la page Web> Modifier les préférences du site …> Réseau> Désactiver "Activer la redirection automatique"> OK.

Supprimez simplement la méta-étiquette avec javascript:

 <meta http-equiv="refresh" content="2;http://new-url/" id="meta-refresh"> <script type="text/javascript"> var mr = document.getElementById("meta-refresh"); mr.parentNode.removeChild(mr); </script> 

J'ai défini le délai de rafraîchissement à 2 secondes ci-dessus, à titre d'exemple. Vous pourriez probablement sortir avec 1 seconde, mais ne pas le définir à 0 parce que le javascript n'aura aucune chance d'exécuter dans ce cas. 0 est également ennuyant car il permet de réduire l'utilisation du bouton arrière.

Edit 2012-10-23 Cela ne semble plus fonctionner. Le nœud est toujours supprimé, mais il semble que les navigateurs analysent et tiennent en mémoire toutes les méta-tags de quelque façon que ce soit.

Les méta-tags sont horribles dans ce cas. Qu'en est-il des moteurs de recherche?

Ce que vous devriez faire, c'est faire quelque chose comme je l'ai décrit ici . Vos liens doivent indiquer des sites de travail complets comme s'il s'agissait d'une page Web 2.0. Ensuite, avec les gestionnaires d'événements (onclick), vous améliorez l'expérience utilisateur en utilisant ajax.

Ainsi, les utilisateurs d'ajax ne vont pas aux liens, le lien est plutôt traité lorsque vous cliquez et envoyez une requête ajax à la même URL exacte mais avec un paramètre ajax GET.

Maintenant, sur le côté serveur, vous devez pouvoir générer l'ensemble du site par une méthode. S'il s'agit d'une requête ajax, vous envoyez le contenu correspondant. Si ce n'est pas une requête ajax, vous générez le site complet avec la partie associée intégrée .

Votre site sera convivial pour le référencement , disponible pour les utilisateurs mobiles et progressivement amélioré pour les utilisateurs sur les navigateurs et plates-formes modernes. Enfin, les liens hash générés par ajax seront utilisables, même en tant que liens.

Awesomeness . 🙂

Je suis d'accord que le méta-rafraîchissement n'est pas la bonne voie ici. En plus du lien de galambalazs, recherchez "amélioration progressive".

Cependant, dans l'esprit de répondre à la question, vous pouvez essayer ce qui suit. Il n'est pas testé, peut ne pas fonctionner dans tous les navigateurs, mais devrait être dans les bonnes lignes:

 var i, refAttr; var metaTags = document.getElementsByTagName('meta'); for i in metaTags { if( (refAttr = metaTags[i].getAttribute("http-equiv")) && (refAttr == 'refresh') ) { metaTags[i].parentNode.removeChild(metaTags[i]); } } 

Le fait de retirer cela empêcherait le navigateur de se rafraîchir dans le temps reste à voir.

C'est un exemple de ce que j'utilise et ça fonctionne parfaitement (surtout sur Firefox)!

 <html><head> <meta http-equiv="content-type" content="text/html;charset=utf-8"> <title>Redirecting</title> </head> <body onload="location.replace('http://www.live.comeseetv.com'+document.location.hash)"> <a href="http://www.live.comeseetv.com">Redirecting you to http://www.live.comeseetv.com</a> </body></html>