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
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; } });
Kökenli yazı tipi Çapraz Kökeni Kaynak...
Youtube iframe apı hata " konsol ç...
etkinleştirme kökenli çapraz IIS7 kayn...
Nasıl Facebook tuval sayfalarda iframe...
XMLHttpRequest Kökenli null Access-Con...