之前在开发 Chrome OS 系统下的快盘文件系统时发现使用 Chrome 自带的 XMLHttpRequest 存在一些限制:
使用 jQuery 实现的 XHR 碰到 HTTP 302 redirect 等特殊的请求时浏览器会自动处理(例如:自动重定向),在 Chrome App 模式下会被限制,如果需要得到重定向的地址就不好实现,此时可以考虑用 Chrome Socket 来实现完整的 HTTP 协议请求。
有关 Chrome Socket 即 chrome.sockets.tcp 的说明可以参考这里:
https://developer.chrome.com/apps/sockets_tcp
后来发现网上已经有人实现了一个还算完整的基于 Chrome Socket 的 XMLHttpRequest:
https://github.com/ahmadnassri/chrome.sockets.tcp.xhr
经过实际使用之后发现这个 XHR 类确实实现了基本的 HTTP 协议,但实际使用时还是有点问题,因此我在此项目基础上做了一些改进:
- 原 chrome.sockets.tcp.xhr 不支持获取完整的 HTTP 响应内容,只能得到第一次接收到的数据,这样对于需要返回大量数据的下载等操作是不能接受的;
- 增加重定向判断,支持直接返回 HTTP 302 重定向的目标地址;
- 支持设置第一次接收到数据的超时;
- 支持所有接收的数据通过 ArrayBuffer 返回。
修改过的基于 Chrome Socket 的 XMLHttpRequest 代码我放在这里了:
https://github.com/zohead/chrome.sockets.tcp.xhr
chrome.sockets.tcp.xhr 的使用文档可以参考这里:
http://chromesocketstcpxhr.readthedocs.org/en/latest/
修改之后的使用方法与这个文档里的基本一致,增加的部分例如可以通过 recvTimeout 属性指定第一次接受到数据的超时:
var xhr = new chrome.sockets.tcp.xhr(); xhr.recvTimeout = 3500; xhr.open('GET', 'http://google.com:80'); xhr.setRequestHeader('X-Requested-With', 'chrome.sockets.tcp.xhr'); xhr.send(null);
上面的代码就表示连接成功之后如果 3.5 秒之内没有接收到数据就认为超时断开连接。
由于此 chrome.sockets.tcp.xhr 项目功能实现的还不是特别完整,如果此项目使用中发现有什么问题欢迎提出并 fork 修改哦~~~
请教下,想做Chrome开发,要有哪些基本功。不是做开发的,只是业余玩玩
需要基本的编程知识,然后就是网页前端HTML、JavaScript这些技术。
我主要是做Linux系统相关,这种App也是业余抽时间写写的。