Pregunta:BASE, Javascript, e Internet Explorer Firefox vs
IE y Firefox/Safari parecen tratar de manera diferente con base href y Javascript peticiones de tipo window.location. Primero, ¿es esta una descripción precisa del problema? ¿Que esta pasando? ¿Y cuál es la mejor solución entre navegadores para lidiar con esta situación?
Contexto:
tengo una pequeña Sitelet archivo plano PHP (que es en realidad un prototipo de pruebas de usabilidad).
dinámicamente genero valor HREF de la etiqueta BASE en PHP, es decir, si se está ejecutando en el servidor de la empresa, que es:
$basehref = 'http://www.example.com/alpha/bravo/UsabilityTest/';
y en mi máquina dev locales, es:
$basehref = 'http://ellen.local/delta/echo/foxtrot/UsabilityTest/';
Para una de las tareas, que acumule una cierta entrada de usuario, hacer algunas transformaciones en él en Javascript, y enviar al servidor mediante código como este:
function allDone() {
// elided code for simplicity of stackoverflow question
var URI = "ProcessUserInput.php?";
URI = URI + "alphakeys=" + encodeURI(keys.join(","));
URI = URI + "&sortedvalues=" + encodeURI(values.join(","));
window.location = URI;
}
Tanto el archivo javascript (que contiene la función allDone()) como el script PHP de procesamiento (ProcessUserInput.php) viven en un subdirectorio de UsabilityTest. En otras palabras, su URL real es
http://www.example.com/alpha/bravo/UsabilityTest/foxtrot/ProcessUserInput.php aka
$basehref . '/foxtrot/ProcessUserInput.php'
El problema
JavaScript de IE, básicamente, parece ignorar la base href. El javascript y el procesador PHP viven en el mismo directorio, por lo que la llamada a ProcessUserInput.php funciona bien. La entrada se procesa y todo funciona bien.
Pero cuando pruebo en Firefox, el código JavaScript que hace parecen utilizar la base href, debido a la salida de la secuencia de comandos se envía a
$basehref . '/ProcessUserInput.php'
Esto rompe, porque ProcessUserInput.php está en un subdirectorio de basehref. Sin embargo, si agrego el nombre del subdirectorio a javascript, ya no funciona en IE.
Soluciones?
puedo pensar en algunas formas de resolver esto:
- En Javascript, leer la propiedad href de la etiqueta BASE y anteponer manualmente a
var URI
en el javascript, llamar a una URL absoluta resuelto totalmente - Procese el .js file with PHP e inserte la variable
$basehref
en la secuencia de comandos - Mueva los archivos a
- ¿Algo más?
estoy seguro de que hay otras maneras de resolver esto también. ¿Cuál es la mejor manera de lidiar con BASE HREF en JavaScript cuando IE y Firefox lo aplican de manera diferente en JavaScript?
No, esto no resuelve el problema href base en IE (a partir de la versión 8). Acabo de sonreír cuando vi lo simple que se puede resolver, pero duró solo un minuto. –
Según lo mencionado por @Halil Özgür, esta no debería ser la respuesta aceptada. – fritzmg