javascript - tag - redireccionar una pagina web a otro dominio
Forma válida de agregar noscript en la cabeza para envolver la redirección (6)
La etiqueta <noscript>
no puede estar en el <head>
, debe estar en el <body>
La práctica común es mostrar un mensaje en lugar de redirigir, ya que no hay forma de redirigir solo si javascript está deshabilitado.
Podría hacerlo al revés, hacer que la primera página sea nojs.html, y en esa página usar javascript para redirigir al contenido principal.
Así que estaba pensando que una forma sencilla de lidiar con la desactivación de javascript por el navegador sería la siguiente:
<head>
<title>JavaScript Test</title>
<noscript>
<meta http-equiv="Refresh"
content="1;url=nojs.html" />
</noscript>
</head>
Y tener el nojs.html
tiene algo como:
<p>Return to <a href="jstest.html">test</a> after enabling javascrpt.</p>
En la página del accidente.
Este no es mi método preferido, pero es agradable y simple hasta que se pueda elaborar algo más elegante para los usuarios sin javascript.
Sin embargo, no es válido colocar un elemento <noscript>
en la sección de head
. Las pruebas preliminares funcionaron de todos modos, por supuesto, pero soy supersticioso cuando se trata de que mi código sea válido, y además odiaría que esto no supere una prueba de campo.
Entonces, ¿hay una manera válida de hacer esto? ¿Tal vez envolver el noscript
en otro elemento, como una etiqueta de objeto? ¿O alguna forma aún más simple en la que no estoy pensando?
La solución de Doug es bastante buena, pero tiene algunos inconvenientes:
- No es válido tener un atributo de clase en el elemento html. En su lugar, utiliza el cuerpo.
- Requiere que sepa en qué tipo de pantalla desea configurar el elemento (es decir, "
.js #wrapper { display: block }
").
Una solución más simple, válida y flexible que utilice el mismo enfoque podría ser:
<html>
<head>
<!-- put this in a separate stylesheet -->
<style type="text/css">
.jsOff .jsOnly{
display:none;
}
</style>
</head>
<body class="jsOff">
<script type="text/javascript">
document.body.className = document.body.className.replace(''jsOff '','''');
</script>
<noscript><p>Please enable JavaScript and then refresh the page.</p></noscript>
<p class="jsOnly">I am only shown if JS is enabled</p>
</body>
</html>
Con esto, es html válido (no hay atributo de clase en el elemento html). Es más sencillo (menos CSS). Es flexible Simplemente agregue la clase "jsOnly" a cualquier elemento que desee mostrar solo cuando JS esté habilitado.
Me gusta la solución de Doug. Sin embargo, si necesita redireccionar, recordaría que si bien hay una especificación y un estándar, el mundo de los navegadores web es un mundo sucio e imperfecto. Que la especificación permita o no algo no es tan importante como si funciona o no en el conjunto de navegadores que le interesan.
Solo mire el código fuente de cualquier sitio importante ... La mayoría de ellos no validarán lo apostaría :)
No estoy seguro de por qué necesita redireccionar a otra página en lugar de solo mostrar un mensaje. Uso JS y un poco de CSS para manejar estas situaciones por mí. Algo como esto:
<head>
....
<script type="text/javascript"> document.documentElement.className += " js"</script>
<link rel="stylesheet" type=''text/css'' href="css/layout.css" media="all" />
</head>
<body>
<div id="noscript">Please enable JavaScript, then refresh this page. JavaScript is required on this site</div>
<div id="wrapper">
...
</div>
</body>
Luego en layout.css
:
#wrapper { display: none } /* Hide if JS disabled */
.js #wrapper { display: block } /* Show if JS enabled */
.js #noscript { display: none } /* Hide if JS enabled */
Al hacerlo de esta manera, la clase se aplica al elemento html
antes de que la página se represente para que no tenga un parpadeo ya que el contenido que no es JS se intercambia por el contenido de JS.
Qué pasa:
noscript{
z-index:100;
position:absolute;
top:0;
left:0;
width:100%;
height:100%;
min-height:1024px; background:#FFF;
}
Y:
<noscript>
<p>Please <a href="no_js_instructions.php">enable Javascript</a> on your browser.</p></noscript>
Si realmente desea una forma válida de hacerlo, convierta su página principal en la página nojs.htm
y use JS para ocultar todo el contenido antes de que se muestre al usuario y redirija inmediatamente a la página principal real utilizando javascript.