Unsicheren JavaScript-Versuch zu initiieren, die navigation für Rahmen mit URL

Dies ist ein bisschen kompliziert, bitte Geduld mit mir.
Website a hat Einen iframe enthält, website B und website B hat ein iframe enthalten website C.

Gibt es eine Schaltfläche auf der website von C, wenn geklickt haben, ich will aktualisieren Sie die url der website B. unten wird das javascript aufgerufen, um die Aktualisierung von website B, website C, welche in einem iframe

function url_update(id){
   var host = 'https://websiteb.com ';
   var myHost = host.split('/'); 
   if (id != "" && myHost != ""){
    try {
        if (id.substring(0,1) != '/'){
            id = '/' + id;
        }
        var dft_url = myHost[0] + '//' + myHost[2] + id;
        window.parent.location.href = dft_url;
    } catch(e){alert("Cannot go to the desired url location: " + dft_url);}
   } 
 }

aber, wenn die Zeile "Fenster.Eltern.Lage.href = dft_url;" ausgeführt wird, erhalte ich die folgende Fehlermeldung:

 Unsafe JavaScript attempt to initiate navigation for frame with URL  
 'https://websiteB.com' from frame with URL
 'https://websiteC.com'. The frame attempting navigation is 
  neither same-origin with the target, nor is it the target's parent or    
  opener.

Ich verstehe nicht, warum das passiert und wie man es beheben. Jede Hilfe wird geschätzt.

Habe ich einige der Forschung, die meisten behaupteten das ist ein origin-problem, aber wenn ich Eine website, was bedeutet, dass nur website B mit einem iframe enthält, website C, dann ist der obige code funktioniert. Auch wenn Sie unterschiedliche domains

  • Möglicherweise möchten Sie c eine Seite in b machen es zu einem Teil b...
  • Sie werden nicht in der Lage, das zu tun, wenn die Domänen unterschiedlich sind, schauen Sie in HTML5-messaging-api. developer.mozilla.org/en-US/docs/Web/API/Window/postMessage Mit dieser api können Sie das annehmen von Nachrichten von Websites mit verschiedenen domains und ausführen von JS basierend auf der Nachricht, die z.B. durch eine änderung die url der Seite, von der die Nachricht empfangen hat.
  • brso05: ich kann das nicht, ich mache keine eigene website B, oder A, ich habe nur Zugriff auf website-C. Dies ist der Grund, warum C in einem iframe einbetten in B.
  • gibt es eine Möglichkeit zu überprüfen, was der Wert von window.übergeordnete website C, ist es website A oder website B?
  • meinst du wie Fenster.Eltern.Lage.href? nicht ganz sicher, was du meinst mit dem Wert
  • Ich habe die gleiche Sache erlebt, getestet in Chrome 44. Was interessant ist, dass C tatsächlich erlaubt, ändern Sie die Position der oberen Fenster zu tun Fenster.top.Lage.href = "blahblah" auch wenn Website A und C sind cross-domain. Ich verstehe nicht, warum iframe-C navigieren Sie in dem oberen Fenster, aber nicht iframe-B.
  • in der Tat ein iframe ändern Sie die url des obersten Fensters, aber das ist eher verwunderlich (obwohl Sie blockieren kann dieses Verhalten durch das sandboxing der iframe). Wenn C auf einer anderen domain als B und A, und postMessage ist nicht eine option, dann ist sicherlich C ist nicht in der Lage zu ändern, B ' s Position.

InformationsquelleAutor Noob Coder | 2015-07-07
Schreibe einen Kommentar