2010-04-05 5 views
22

Ich bin auf der Suche nach einer browserübergreifenden Methode, um festzustellen, ob der übergeordnete Rahmen den gleichen Ursprung wie mein Rahmen hat, vorzugsweise ohne Warnungen auf der JavaScript-Fehlerkonsole auszugeben.JavaScript, um zu erkennen, ob der Eltern-Frame denselben Ursprung hat?

Die folgende scheint zu funktionieren, aber ich möchte Druckfehler in der Konsole vermeiden (. Mindestens Safari und Chrome tun, wenn auf dem übergeordneten Rahmen Zugriff auf location.href Firefox löst eine Ausnahme, die gefangen werden können):

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

Antwort

0

Versuchen Sie folgendes:

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

ein Aufpreis zu sein scheint "this" da drin, aber selbst wenn ich es entferne, bekomme ich eine Warnung. Einfacher Zugriff auf 'window.parent.location.href' löst es aus. – tlrobinson

+1

Dies wird auch immer noch eine Ausnahme gleichen Ursprungs geben. – Spork

1

ich diese Methode verwenden, zu sagen, ob ein iframe lokale Inhalte enthält,

aber man kann es passieren window.top von th e iframe genausogut

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

// Testfall alert (isLocal (window.top))

+0

Dies ist kein Cross-Browser, da ['window.URL'-Unterstützung stark variiert] (https://developer.mozilla.org/en-US/docs/Web/API/Window/URL) – igorsantos07

+0

Die einzigen Browser, die kein Fenster unterstützen. Die URL ist am Ende des Lebens. Also, es sei denn du bist JQuery .... – Indolering

6

ich tun würde, so etwas wie:

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

Danke - das hat mich richtig sauer gemacht! – jack

+3

Ich habe leider einige Stunden mit dieser Lösung verbracht, nur um herauszufinden, das funktioniert nicht für WebKit, wo der gleiche Fehler Fehler ist nicht behebbar. Verwenden Sie diese Lösung NICHT. – Spork

+1

@Spork, ich habe dieses Problem nicht mit einem aktuellen Chrome (43). Können Sie feststellen, auf welchem ​​Browser/welcher Version dieses Problem auftritt? –

Verwandte Themen