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