| | 1 | 1、跨域 |
| | 2 | JavaScript出于安全方面的考虑,不允许跨域调用其他页面的对象。但在安全限制的同时也给注入iframe或是ajax应用上带来了不少麻烦。这里把涉及到跨域的一些问题简单地整理一下: |
| | 3 | 首先什么是跨域,简单地理解就是因为JavaScript同源策略的限制,a.com 域名下的js无法操作b.com或是c.a.com域名下的对象 |
| | 4 | 在跨域问题上,域仅仅是通过URL来识别而不会去尝试判断相同的ip地址对应着两个域或两个域是否在同一个ip上。 |
| | 5 | 解决跨域的方法有几种有兴趣的可以自己网上找下资料,这里用的是windowname方式: |
| | 6 | |
| | 7 | 跨域用的两个JS库 |
| | 8 | |
| | 9 | 原生: http://js.3conline.com/js/common/windowname.js [[BR]] |
| | 10 | 依赖JQ: http://js.3conline.com/js/common/jQuery.windowName.plugin2.js |
| | 11 | 区别在于 第一个是原生 js 的 也就不不依赖 jq 版本 你用不用 jq 都可以用 |
| | 12 | 第二个是 jq 版本的 windowname 他依赖1.42以下(包括1.42)的 jq 所以高版本就挂了[[BR]] |
| | 13 | [[BR]]原生库例子: |
| | 14 | postCORS(url, callback, data, extra)[[BR]] |
| | 15 | @param url 待提交页面的地址[[BR]] |
| | 16 | @param callback 回调函数,回传两个参数,data(string) 和 extra(isXhr: boolean)[[BR]] |
| | 17 | @param data 待提交的键值对[[BR]] |
| | 18 | @param extra {withCookie: true} 需要 cookie 验证的时候加上该参数,其他情况无需添加[[BR]] |
| | 19 | |
| | 20 | 关于跨域携带cookie,接口需要返回响应头 [[BR]] Access-Control-Allow-Credentials:true 以及 Access-Control-Allow-Origin: request.headers['origin'](需要显式指定请求头的 origin 字段) |
| | 21 | [[BR]]默认的(无需携带cookie)只需要返回 Access-Control-Allow-Origin: * |
| | 22 | |
| | 23 | @example |
| | 24 | postCORS('http://127.0.0.1/action.php', function(data, extra) { |
| | 25 | $('msg').value += '\n\n' + data; |
| | 26 | }, |
| | 27 | { |
| | 28 | 'key': 'happy', |
| | 29 | 'v': 'not' |
| | 30 | }, |
| | 31 | {withCookie: true,charset: 'req_enc=utf-8'} |
| | 32 | ); |