document.domain
yö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.html
aş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.domain
tamamen 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 GET
veya POST
içermeyen ve gövdesi text/plain
olan 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 Origin
baş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 XDomainRequest
tü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.postMessage
yöntem
window.postMessage
, çağrıldığında, MessageEvent
yü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 . MessageEvent
Tip mesaj, bir var data
sağlanan ilk argüman dize değerine ayarlanır özelliği window.postMessage
bir, origin
çağıran pencerede ana belgenin kökeni karşılık gelen özellik window.postMessage
zamanda window.postMessage
çağrıldı ve source
pencere dan mülk hangi window.postMessage
denir.
Kullanmak için window.postMessage
bir olay dinleyicisi eklenmelidir:
// Internet Explorer
window.attachEvent('onmessage',receiveMessage);
// Opera/Mozilla/Webkit
window.addEventListener("message", receiveMessage, false);
Ve bir receiveMessage
iş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.origin
source
Kaynak: https://developer.mozilla.org/en/DOM/window.post