2011-06-28 15 views
7

Estoy desarrollando una aplicación de motor de aplicación de Google. Estoy intentando redirigir al usuario a la página de inicio de sesión cuando se hace clic en un botón. Para hacer esto, establecí window.location.pathname en la siguiente cadena /_ah/login?continue=http%3A//localhost%3A8080/. Sin embargo, Chrome escapa de la cadena para que la URL completa se convierta en http://localhost:8080/_ah/login%3Fcontinue=http%3A//localhost%3A8080/, y esto da un error 404. ¿Cómo puedo evitar que esto suceda? La URL que funciona es http://localhost:8080/_ah/login?continue=http%3A//localhost%3A8080/Cómo evitar que window.location.pathname escape caracteres en URL

+0

Esto no tiene nada que ver con App Engine. –

Respuesta

0

Creo que está mejor solo con window.location.href. En Chrome y Firefox window.location.href="/?foofoo" redirige a <domain:port>/?foofoo

7

Establezca window.location.href en su lugar.

+2

window.location.href está haciendo lo mismo y es lo que estaba usando inicialmente. Creo que no escapa? pero escapa &. Dondequiera que tuviera un & se convirtió en & y esto rompió mi aplicación. – morpheus

+0

Parece que tienes un problema diferente. Si el navegador va a escapar algo en la ubicación, usará el estilo% XX, no las entidades HTML como &. Supongo que debe marcar la cadena como segura en su motor de plantillas para evitar que inserte entidades HTML. Para verificar que este es el problema, vea la fuente en la página afectada y observe el lugar donde se representa este valor. –

0

si se establece la ubicación y la cadena de consulta por separado que debe obtener mejores resultados (al menos en cromo)

function redirect_to_login() 
{ 
    window.location.href = "/_ah/login"; 
    window.location.search = "?continue=http%3A//localhost%3A8080/"; 
} 

que no probamos esto en IE lo siento. Parece que funciona con una pequeña cantidad de pruebas en Chrome.

(pensándolo bien ... si usted está poniendo esto en un atributo onclick):

<input type="button" 
    onclick="window.location.href = '/_ah/login'; window.location.search = '?continue=http%3A//localhost%3A8080/';" 
    value="Click Me!" 
/> 
+0

esto es realmente peor. window.location.href seguido de window.location.search está actuando como si window.location.href nunca estuviera presente (usando Chrome 12 - probado en localhost). – morpheus

+1

@morpheus Eso no es bueno. Me di cuenta de que la página en la que lo probé no lo habría mostrado. Mis disculpas. La única otra cosa que sugeriría es usar '.assign ("/_ ah/login /? Continue = http% 3A // localhost% 3A8080/'De lo contrario, descubra por qué window.location.href no funciona correctamente cuando lo asigna de una vez. Esto generalmente funciona (como en la respuesta de @ minitexc) –

Cuestiones relacionadas