SORU
2 AĞUSTOS 2014, CUMARTESİ


Etki alanında çapraz kökenli bir çerçeve erişmesini kökenli bir çerçeve Engellendi

<iframe> benim HTML sayfası yükleme ve içindeki unsurlar Javascript kullanarak erişmek için çalışıyorum, ama benim kod çalıştırmak için çalıştığınızda, aşağıdaki hatayı alıyorum:

SecurityError: Blocked a frame with origin "http://www.<domain>.com" from accessing a cross-origin frame.

Bana çerçevesinde öğeleri erişebilirsiniz böylece bir çözüm bulmak için yardım edebilir misiniz?

Boşuna test için, ama bu kodu kullanıyorum

 $(document).ready(function() {
     var iframeWindow = document.getElementById("my-iframe-id").contentWindow;

     iframeWindow.addEventListener("load", function() {
         var doc = iframe.contentDocument || iframe.contentWindow.document;
         var target = doc.getElementById("my-target-id");

         target.innerHTML = "Found it!";
     });
 });

CEVAP
2 AĞUSTOS 2014, CUMARTESİ


Aynı Kökenli Güvenlik Politikası

Sanaolamazjavascript ile <iframe> erişim, eğer bunu yaparsan çok büyük bir güvenlik açığı olurdu. Same Origin Security Policyherhangi bir tarayıcı herhangi bir komut dosyası başka bir kökene sahip bir çerçeve erişmeyi engeller.

http://www.example.com ve erişimi istiyor src="http://www.anothersite.com" <iframe> örneğin bir çerçeve başka bir kaynağı vardır, çünkü bunu yapmak mümkün olacak.

Kökeni ise aşağıdaki değişkenlerin en az bir muhafaza değil eğer doğru değilse, farklı olarak kabul edilir

<protocol>://<hostname>:<port>/path/to/page.html

Protokol, ana bilgisayar adı ve bağlantı noktası eğer bir çerçeve erişmek istiyorsanız alan adınızın aynı olması gerekir.

Geçici çözüm

Hatta düşünce farklı bir kökene sahip sitelerin içeriğine müdahale Aynı Kökenli İlke blokları komut dosyalarıeğer her iki etki/siteler varsa, bu sorunu gidermek, window.postMessage ve göreceli etkinliği window.onmessage kullanarak çalışabilirsiniziki sayfa arasında mesaj göndermek için, bu gibi:

  • Ana Sayfa:

    var frame = document.getElementById('your-frame-id');
    
    frame.contentWindow.postMessage(/*any variable or object here*/, '*');
    
  • <iframe> (ana sayfada yer alan):

    window.addEventListener('message', function(event) {
    
        // IMPORTANT: Check the origin of the data!
        if (~event.origin.indexOf('http://yoursite.com')) {
            // The data has been sent from your site
    
            // The data sent with postMessage is stored in event.data
            console.log(event.data);
        } else {
            // The data hasn't been sent from your site!
            // Be careful! Do not use it.
            return;
        }
    });
    

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Apple

    Apple

    22 HAZİRAN 2005
  • Kyler Briskey

    Kyler Briske

    20 ŞUBAT 2011
  • SuicideSheeep

    SuicideSheee

    8 Ocak 2012