服务端强行要求弹出客户端登录窗口自动登录方法



想做点东西练练javascript,于是打算为饭否AIR客户端爱饭加上额外的功能,例如上传图片等,先尝试了使用javascript验证和发送饭否消息,仅这个就花了不少时间,很多时间花在了去除低级错误上,例如jquery ajax的type:”post”被我写成了method:”post”,花了很多时间才找出来。

先放上主要代码,使用jquery框架以及jquer.base64插件:

有两个主要问题:
 
var name = "yourname";
var pass = "yourpassword";
$.ajax({
url: "http://api.fanfou.com/statuses/update.xml",
type:"POST",
data: "status=信息内容",
beforeSend: function(xhr){
xhr.setRequestHeader('Authorization', 'Basic ' + $.base64.encode(name + ':' + pass));
},
success: function(data, textStatus){
alert(data);
}
});
  1.验证用户

饭否API验证方式为 HTTP Basic 验证,需要对“用户名:密码”进行base64编码,添加进ajax请求的http头信息。
XMLHttpRequest.setRequestHeader(‘Authorization’, ‘Basic ‘ + $.base64.encode(name + ‘:’ + pass));
使用饭否需要验证的API(例如读取私信、发送消息)时,都要在请求前加上这一条HTTP头信息。

爱饭使用YUI框架,可以通过YAHOO.util.Connect.initHeader设置每次ajax请求的默认HTTP头信息,
initHeader(‘Authorization’, ‘Basic ‘ + Base64.encode(name + ‘:’ + pass), true);
最后一个参数”true”代表设为默认http头信息。
设置之后每次使用YAHOO.util.Connect.asyncRequest进行ajax请求都不需要再添加验证。

2.跨域问题

使用ajax请求资源总有跨域问题,即请求只能发生在相同的域内。
以上那段代码请求的域为api.fanfou.com,如果放在网上,除非放在饭否服务器,有相同的域,否则无法运行。
对本地网页,在跨域上,不同浏览器有不同规则,IE允许跨域访问,firefox与chorme都不行。以上代码放在本地,用IE打开,就可以运行,用firefox打开,会出现Access to restricted URI denied” code: “1012。

使用IE可以通过设置可信任站点实现跨域获取内容,其他跨域方法网上很多,还未细究,但都是要在客户端设定或者两站互相配合。

所以,使用javascript发送饭否消息只适合运用在AIR程序上,AIR有自己特定的安全沙箱,允许跨域请求。

另,饭否与Twitter的API几乎一样,可直接套用。

P.S 早上起来,发现已经有人对爱饭扩展,做了查看上传的图片的功能,他还在做上传图片的功能,我也没必要再做这部分功能了。开源的好处之一,就是有很多人帮忙完善这个程序啊~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值