跨域消息通信

虛擬主機的相關設置(本地綁定兩個不同的域名)

參看:http://blog.csdn.net/u013162144/article/details/41310691

 

A、1.窗口間通信的兩種方式——同域下:

一.iframe

oMyIframe.contentWindow -> 被iframe包含的頁面的window對 象(如:oMyIframe.contentWindow.document.body.style.background = 'red';)

二.Window.open()  

window.open 有一個返回值,返回被打開窗口的window對象

2.不同域(即跨域):

i. //當本頁面和包含頁面不在同一個域名下的時候,下面這樣的操作就會有跨域操作安全限制問題

oMyIframe.contentWindow.document.body.style.background = 'red';)

解決方法:HTML5中的postMessage對象接收消息的窗口對象.postMessage()

一參 : 發送的數據,二參:接收的域

例如:

www.a.com:

oMyIframe.contentWindow.postMessage('1', 'http://www.b.com');

www.b.com:

window.addEventListener('message', function(ev) {

if (ev.data == '1') {

document.body.style.background = 'red';

}

}, false);

 

B、Ajax Level2(以前ajax不支持跨域,現在可以了)

在標準瀏覽器下,XMLHttpRequest對象已經是升級版本,支持了更多的特性,可以跨域了但是,如果想實現跨域請求,還需要後端的相關配合纔可以

www.a.com:

oBtn.onclick = function() {

var xhr = new XMLHttpRequest();

xhr.onreadystatechange = function() {

if (xhr.readyState == 4) {

if (xhr.status == 200) {

alert(xhr.responseText);

}

}

}

xhr.open('get', 'http://www.b.com/ajax.php', true);

xhr.send();

}

www.b.com中的php:

<?php

header('Access-Control-Allow-Origin:http://www.a.com'); //這是允許訪問該資源的域

echo 'hello';


IE如果想實現跨域請求,則需要使用另外一個對象去實現:XDomainRequest 


var oXDomainRequest = new XDomainRequest();
oXDomainRequest.onload = function() {   //沒有onreadystatechange事件
alert(this.responseText);
}
oXDomainRequest.open('get', 'http://www.b.com/ajax.php', true);
oXDomainRequest.send();

 

C、websocket

參看:http://blog.csdn.net/u013162144/article/details/41357721

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章