问题:在一个网站上想要接收其他网站发过来的消息
跨域,是指浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对JavaScript实施的安全限制。
http://www.nihao.com/index.html 调用 http://www.nihao.com/server.php (非跨域)
http://www.nihao.com/index.html 调用 http://www.nihaoma.com/server.php (主域名不同:nihao/nihaoma,跨域)
http://abc.nihao.com/index.html 调用 http://def.nihao.com/server.php (子域名不同:abc/def,跨域)
http://www.nihao.com:8080/index.html 调用 http://www.nihao.com:8081/server.php (端口不同:8080/8081,跨域)
http://www.nihao.com/index.html 调用 https://www.nihao.com/server.php (协议不同:http/https,跨域)
localhost 调用 127.0.0.1 跨域
跨域:协议、域名、端口其中任意一个不同。
同源:协议、域名、端口均相同,
b页面接受a页面发送过来的信息
//a.html a页面下的代码
var param = {
act_name:"comfirmAddr",
search_name: $("#search_input").val(),
data:selAddList
}
var json = JSON.stringify(param);
console.log(json);
//第二个参数是目标域:http://www.nihao.com/a.html
window.opener.postMessage(json,'*');
window.close();
//b.html b页面下的代码 b页面接受a页面发送过来的信息
HTML:
<el-button onclick="goToB" >打开b.html的页面</el-button>
JavaScript:
function goToB(){
var url = "http://www.ifine.com/b.html"
window.open(url, "打开b.html的页面", "height=" + screen.height + ",width=" + screen.width + ",menubar=no,scrollbars=no,resizable=yes,toolbar=no,status=no,left=100,top=100") ;
}
window.addEventListener('message', receieveMessage, false);
function receieveMessage(event)
{
try
{
var param = event.data;
var json = window.JSON.parse(param);
var act_name = json.act_name;
if(act_name == 'comfirmAddr')
{
vueObject.addrKey = json.search_name;
var v_data = json.data;
vueObject.addresArr = v_data;
}
}
catch(e)
{
alert("异常名字:"+e.name);
alert("异常号:"+e.number);
alert("异常的描述信息:"+e.description);
alert("异常的错误信息:"+e.message);
}
}
window.addEventListener(type, function, true/false);
type:事件的类型(如“click”或“mousedown”或“message”或“resize”)。
function:事件触发后调用的函数。
true/false:true:先捕获 、false:先冒泡
window.removeEventListener(“click”, function);