跨域请求
同源策略与跨域请求
同源策略document
或脚本,对当前 document
读取或设置某些属性,即从一个域上加载的脚本不允许访问另外一个域的文档属性。比如一个恶意网站的页面通过
常用的跨域请求方式分为客户端跨域、服务端跨域与
- 不同的域名,譬如
example.com 的网页请求api.com - 不同的子域名,譬如
example.com 请求api.example.com - 不同的端口,譬如
example.com 请求example.com:3001 - 不同的协议,譬如 https://example.com 请求 http://example.com
客户端跨域
表单POST 跨域提交
JSONP

<script>
标签的跨域能力实现跨域数据的访问,请求动态生成的
function resolveJson(result) {
console.log(result.name);
}
var jsonpScript = document.createElement("script");
jsonpScript.type = "text/javascript";
jsonpScript.src = "http://www.qiute.com?callbackName=resolveJson";
document.getElementsByTagName("head")[0].appendChild(jsonpScript);
标准的callback
。而resolveJson
是我们默认注册的回调函数,注意,该函数名需要全局唯一,该函数接收服务端返回的数据作为参数,而函数内容就是对于该参数的处理。resolveJson
。然后动态生成一段
resolveJson({ name: "qiutc" });
## postMessage

windowObj.postMessage(message, targetOrigin);
windowObj
: 接受消息的Window 对象。message
: 在最新的浏览器中可以是对象。targetOrigin
: 目标的源,*
表示任意。
调用*
。需要接收消息的
//在主页面中获取子页面的句柄
var iframe = document.getElementById("iframe");
var iframeWindow = iframe.contentWindow;
//向子页面发送消息
iframeWindow.postMessage("I'm message from main page.");
//在子页面中监听获取消息
window.onmessage = function (e) {
e = e || event;
console.log(e.data);
};