2010-04-08 15 views
5

Estoy usando la siguiente secuencia de comandos para forzar una página específica, cuando se carga por primera vez, en un iFrame (de terceros).Detección de URL con JavaScript

<script type="text/javascript"> 
    if(window.top==window) { 
     location.reload() 
    } else { 
    } 
</script> 

(Para mayor claridad: Este 'incrustación' se realiza automáticamente por el sistema de terceros, pero sólo si la página se actualiza una vez - para el peinado y algunas otras razones por las que la quiere ahí desde el principio.)

En este momento, me pregunto si este script podría mejorarse de manera que sea capaz de detectar el URL actual de su documento 'principal' para desencadenar una acción específica. Digamos que la URL del sitio de terceros es 'http://cgi.site.com/hp/ ...' y la URL del iFrame 'http://co.siteeps.com/hp/ ...'. ¿Es posible darse cuenta de algo? como este con JS:

<script type="text/javascript"> 
    if(URL is 'http://cgi.site.com/hp/...') { 
     location.reload() 
    } 
    if(URL is 'http://co.siteeps.com/hp/...') { 
     location.do-not.reload() resp. location.do-nothing() 
    } 
</script> 

TIA josh

Respuesta

7
<script type="text/javascript"> 
    if(/^http:\/\/cgi.site.com\/hp\//.test(window.location)) { 
     location.reload() 
    } 
    if(/^http:\/\/co.siteeps.com\/hp\//.test(window.location)) { 
     location.do-not.reload() resp. location.do-nothing() 
    } 
</script> 

Por supuesto, si la segunda es redundante por lo que simplemente puede hacer esto:

<script type="text/javascript"> 
    if(/^http:\/\/cgi.site.com\/hp\//.test(window.location)) { 
     location.reload() 
    } 
</script> 

Lo que estamos haciendo aquí es probando window.location con una expresión regular para ver si coincide con la URL que desea.

Si desea hacer referencia a la URL principal, puede usar parent.location.href.

por su comentario, en caso de que usted quiere hacer algo demás se puede hacer algo como esto:

<script type="text/javascript"> 
    if(/^http:\/\/cgi.site.com\/hp\//.test(window.location)) { 
     location.reload() 
    } 
    else if(/^http:\/\/co.siteeps.com\/hp\//.test(window.location)) { 
     //do something else 
    } 
</script> 

Si estás haciendo nada en el otro caso, eso es efectivamente una NOP (sin operación) por lo que ni siquiera necesita el else allí (u otro si) ya que va a ser un bloque vacío.

+0

hola vivin! thx para su respuesta instantánea! ¿Qué debo definir en lugar de 'location.do-not.reload() resp. location.do-nothing() '? – josh

+0

es si ... si ... es posible con js? o necesito un 'else'? – josh

+0

Suponiendo que entiendo correctamente su flujo lógico, * solo * desea realizar una recarga si la URL coincide con 'http: // cgi.site.com/hp'. Si ese es el caso, no necesitas otro ya que realmente no estás haciendo nada. Por supuesto, si quiere hacer algo * else *, puede usar 'else if (...) {...}' –

2

Puede usar window.location.href para obtener la URL para hacer la comparación de cadenas. Si está en un iframe y necesita saber la URL de los padres parent.location.href, debería obtenerlo.

Cuestiones relacionadas