document.domainyöntem
Bunun, document.domain değerini geçerli etki alanının sonekine ayarlayan bir iframe yöntemi olduğunu unutmayın. Bunu yaparsa, daha sonraki etki alanı denetimleri için daha kısa etki alanı kullanılır. Örneğin, adresindeki belgedeki bir komut dosyasının http://store.company.com/dir/other.htmlaşağıdaki ifadeyi yürüttüğünü varsayın :
document.domain = "company.com";
Bu ifade yürütüldükten sonra sayfa başlangıç denetimini ile geçecektir http://company.com/dir/page.html. Ancak, aynı akıl yürütme yoluyla, company.com kuramayacaklarini document.domain için othercompany.com.
Bu yöntemle, javascript'i ana alan adında oluşturulan bir sayfada bir alt alan adından kaynaklı bir iframe'den gerçekleştirmenize izin verilir. Firefox gibi tarayıcılar document.domaintamamen yabancı bir alanı değiştirmenize izin vermeyeceğinden, bu yöntem alanlar arası kaynaklar için uygun değildir .
Kaynak: https://developer.mozilla.org/en/Same_origin_policy_for_JavaScript
Kaynaklar Arası Kaynak Paylaşımı yöntemi
Kaynaklar Arası Kaynak Paylaşımı (CORS), kaynaklardan kaynaklara erişirken tarayıcının ve sunucunun nasıl iletişim kurması gerektiğini tanımlayan bir W3C Çalışma Taslağıdır. CORS'nin arkasındaki temel fikir, hem tarayıcının hem de sunucunun, isteğin veya yanıtın başarılı veya başarısız olup olmadığını belirlemek için birbirlerini yeterince bilmesini sağlamak için özel HTTP üstbilgileri kullanmaktır.
Basit bir istek için, özel üstbilgileri kullanan GETveya POSTiçermeyen ve gövdesi text/plainolan bir istek, çağrı adı verilen ek bir üstbilgiyle gönderilir Origin. Origin başlığı, talep eden sayfanın kaynağını (protokol, etki alanı adı ve bağlantı noktası) içerir, böylece sunucunun bir yanıt sunup sunmayacağını kolayca belirleyebilir. Örnek bir Originbaşlık şöyle görünebilir:
Origin: http://www.stackoverflow.com
Sunucu, isteğe izin verilmesi gerektiğine karar verirse Access-Control-Allow-Origin, gönderilen ile aynı kaynağı veya *ortak bir kaynaksa yankılanan bir başlık gönderir . Örneğin:
Access-Control-Allow-Origin: http://www.stackoverflow.com
Bu üstbilgi eksikse veya orijinler eşleşmiyorsa, tarayıcı isteği reddeder. Her şey yolundaysa, tarayıcı isteği işler. Ne isteklerin ne de yanıtların çerez bilgilerini içermediğini unutmayın.
Mozilla ekibi, CORS hakkındaki yayınlarındawithCredentials , tarayıcının XHR aracılığıyla CORS'i destekleyip desteklemediğini belirlemek için mülkün varlığını kontrol etmeniz gerektiğini önermektedir . Daha sonra XDomainRequesttüm tarayıcıları kapsayacak şekilde nesnenin varlığıyla eşleştirebilirsiniz:
function createCORSRequest(method, url){
var xhr = new XMLHttpRequest();
if ("withCredentials" in xhr){
xhr.open(method, url, true);
} else if (typeof XDomainRequest != "undefined"){
xhr = new XDomainRequest();
xhr.open(method, url);
} else {
xhr = null;
}
return xhr;
}
var request = createCORSRequest("get", "http://www.stackoverflow.com/");
if (request){
request.onload = function() {
// ...
};
request.onreadystatechange = handler;
request.send();
}
CORS yönteminin çalışması için herhangi bir sunucu üstbilgisi tamircisine erişiminizin olması gerektiğini ve herhangi bir üçüncü taraf kaynağına erişemeyeceğinizi unutmayın.
Kaynak: http://www.nczonline.net/blog/2010/05/25/cross-domain-ajax-with-cross-origin-resource-sharing/
window.postMessageyöntem
window.postMessage, çağrıldığında, MessageEventyürütülmesi gereken herhangi bir komut dosyası tamamlandığında (örn window.postMessage. bir olay işleyiciden çağrılırsa kalan olay işleyicileri, önceden ayarlanmış bekleyen zaman aşımları, vb.) hedef pencerede a gönderilmesine neden olur . MessageEventTip mesaj, bir var datasağlanan ilk argüman dize değerine ayarlanır özelliği window.postMessagebir, originçağıran pencerede ana belgenin kökeni karşılık gelen özellik window.postMessagezamanda window.postMessageçağrıldı ve sourcepencere dan mülk hangi window.postMessagedenir.
Kullanmak için window.postMessagebir olay dinleyicisi eklenmelidir:
// Internet Explorer
window.attachEvent('onmessage',receiveMessage);
// Opera/Mozilla/Webkit
window.addEventListener("message", receiveMessage, false);
Ve bir receiveMessageişlev bildirilmelidir:
function receiveMessage(event)
{
// do something with event.data;
}
Site dışı iframe ayrıca etkinlikleri şu yollarla doğru bir şekilde göndermelidir postMessage:
<script>window.parent.postMessage('foo','*')</script>
Herhangi bir pencere, belgenin penceredeki konumuna bakılmaksızın, kendisine mesaj göndermek için herhangi bir zamanda başka bir pencerede bu yönteme erişebilir. Sonuç olarak, iletileri almak için kullanılan herhangi bir olay dinleyicisi, önce kaynak ve olası kaynak özelliklerini kullanarak iletiyi gönderenin kimliğini kontrol etmelidir. Bu önemsiz olamaz: ve muhtemelen özelliklerinin kontrol edilmemesi siteler arası komut dosyası saldırılarına olanak tanır.originsource
Kaynak: https://developer.mozilla.org/en/DOM/window.post