2010-04-05 9 views
22

Sto cercando un modo cross-browser per rilevare se il frame principale è la stessa origine del mio frame, preferibilmente senza stampare avvisi sulla console degli errori JavaScript.JavaScript per rilevare se il frame principale è della stessa origine?

Quanto segue sembra funzionare ma vorrei evitare errori di stampa alla console (. Almeno Safari e Chrome non quando si accede location.href sul frame principale Firefox genera un'eccezione che può essere catturato):

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

risposta

0

Prova questo:

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

Sembra che ci sia un extra "questo" lì dentro, ma anche se lo rimuovo, ricevo un avvertimento. Semplicemente accedendo a 'window.parent.location.href' lo si innesca. – tlrobinson

+1

Questo darà comunque una stessa eccezione di origine. – Spork

1

io uso questo metodo per capire se un iframe contiene contenuti locali,

ma si può passare da window.top ° e iframe altrettanto bene

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 
    } 
} 

// caso di test di allarme (IsLocal (window.top))

+0

Questo non è cross browser poiché il supporto di '' window.URL' 'varia notevolmente] (https://developer.mozilla.org/en-US/docs/Web/API/Window/URL) – igorsantos07

+0

Gli unici browser che non supportano la finestra. Gli URL sono al termine della vita. Quindi, a meno che tu non sia JQuery .... – Indolering

6

vorrei fare qualcosa di simile:

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

Grazie - questo mi faceva davvero incazzare! – jack

+3

Purtroppo ho trascorso alcune ore con questa soluzione, solo per scoprire che questo non funziona per WebKit, dove lo stesso errore di origine è non modificabile. NON usare questa soluzione. – Spork

+1

@Spork, non ho questo problema utilizzando un recente Chrome (43). Puoi dire su quale browser/versione si presenta questo problema per favore? –

Problemi correlati