2010-08-16 7 views
16

Quiero establecer el atributo href base de una página en Javascript basado en el nombre de host actual. He generado páginas HTML que se pueden ver en diferentes nombres de host, lo que significa que generar una etiqueta href base funcionará en un nombre de host pero será incorrecta en el otro.¿Cómo configuro la href base de una página en Javascript?

+0

Normalmente tengo un archivo constants JS que incluyo y establezco '$ .serverRoot' para que sea la raíz relativa del host (ej.' $ .serverRoot = '/ myapp /'; ' –

+0

Eso funciona para cosas como AJAX solicitudes, pero si tuviera que ajustar todas las rutas de las imágenes y vincular hrefs para dar cuenta de una variable Javascript, tendría que hacer una gran cantidad de trabajo. Usar la etiqueta href base resuelve muchos problemas que estaba teniendo con tener el el mismo archivo HTML accesible en diferentes nombres de host, pero introdujo el problema de rutas incorrectas en un nombre de host. –

Respuesta

30

La forma correcta de hacer esto es hacer un document.write de la etiqueta con sede fuera el nombre de host actual:

correcta:

<script type="text/javascript"> 
document.write("<base href='http://" + document.location.host + "' />"); 
</script> 

Este método ha producido resultados correctos en el IE, FF, Chrome y Safari. Se produce un resultado diferente (correcta) de dowing la siguiente:

incorrecta:

<script type="text/javascript"> 
var newBase = document.createElement("base"); 
newBase.setAttribute("href", document.location.hostname); 
document.getElementsByTagName("head")[0].appendChild(newBase); 
</script> 
+0

He tenido algunos problemas con el rastreador de Google mientras usaba este método. No puse un espacio entre 'y />', y el rastreador está interpretando mi href base como document.location.hostname '/>. Esto puede ser un problema con esta solución. Para obtener más información, consulte: http://www.google.com/support/forum/p/Webmasters/ hilo? tid = 2cff8eadfdf3a393 & hl = es & fid = 2cff8eadfdf3a393000498a325f9c75d –

+3

No hay ninguna razón para que 'document.write' sea "correcto" y la inserción correcta de un nodo en el árbol del documento sería "incorrecta". La pregunta entra en la categoría "resolver el problema equivocado", pero el enfoque descrito como "correcto" aquí a menudo inserta una etiqueta 'base' en un lugar equivocado, para empezar. Si el código está en la parte 'head', es bastante inútil (¿por qué no poner la etiqueta' base' correcta como HTML normal?), Y si se ejecuta en otro lugar, generalmente insertará 'base' en' body'. –

+1

Tengo curiosidad de por qué el método "incorrecto" es incorrecto. –

2
document.write ("");

<script> 
 
document.write("<base href='"+ window.location.protocol +'//' + window.location.host + "' >"); 
 
</script>

0

creo que será mejor que haces de esta manera

<script type="text/javascript"> 
     document.head.innerHTML = document.head.innerHTML + "<base href='" + document.location.href + "' />"; 
    </script> 

Como location.hostname no devuelve la raíz de contexto de aplicación! También puede registrar el document.location en la consola console.log para ver todos los metadatos disponibles en document.location.

Cuestiones relacionadas