2010-04-05 6 views
22

Estoy buscando una forma de navegador cruzado para detectar si el marco principal es del mismo origen que mi marco, preferiblemente sin advertencias de impresión en la consola de error de JavaScript.JavaScript para detectar si el marco principal es del mismo origen?

El siguiente parece funcionar pero me gustaría evitar errores de impresión a la consola (., Al menos, Safari y Chrome no cuando se accede a location.href en el marco padre Firefox lanza una excepción que puede ser capturado):

function parentIsSameOrigin() { 
    var result = true; 
    try { 
     result = window.parent.location.href !== undefined; 
    } catch (e) { 
     result = false; 
    } 
    return result; 
} 

Respuesta

0

Prueba esto:

function parentIsSameOrigin() 
{ 
    var result = true; 
    if (window.parent) 
    { 
     result = Boolean 
     (
      // more precise modifications needed here 
      window.this.location.href.indexOf(window.parent.location.href) == 0 
     ); 
    } 
    return result; 
} 
+2

Parece que hay un extra de "este" allí, pero incluso si lo elimino, recibo una advertencia. Simplemente accediendo a 'window.parent.location.href' lo desencadena. – tlrobinson

+1

Esto también dará una misma excepción de origen. – Spork

1

utilizo este método para determinar si un iframe contiene contenido local,

pero puede pasarlo window.top de Th e iframe igual de bien

function islocal(win){ 
var H=location.href, 
    local= H.substring(0, H.indexOf(location.pathname)); 
    try{ 
     win=win.document; 
     return win && win.URL && win.URL.indexOf(local)== 0; 
    } 
    catch(er){ 
     return false 
    } 
} 

// alerta caso de prueba (islocal (window.top))

+0

Esto no es un navegador cruzado ya que el soporte de ['window.URL' varía mucho] (https://developer.mozilla.org/en-US/docs/Web/API/Window/URL) – igorsantos07

+0

Los únicos navegadores que no admiten ventana. La URL está al final de la vida. Así que a menos que seas JQuery ... – Indolering

6

Me gustaría hacer algo como:

var sameOrigin; 
try 
{ 
    sameOrigin = window.parent.location.host == window.location.host; 
} 
catch (e) 
{ 
    sameOrigin = false; 
} 
return sameOrigin; 
+0

Gracias - ¡esto realmente me estaba molestando! – jack

+3

Tristemente pasé algunas horas con esta solución, solo para descubrir que esto no funciona para WebKit, donde el mismo error de origen es incostable. NO use esta solución. – Spork

+1

@Spork, no tengo este problema usando un Chrome reciente (43). ¿Puedes decir en qué navegador/versión se produce este problema, por favor? –

Cuestiones relacionadas