用cookie在本地传输数据
最近在研究如何测试网页的加载速度,发现了一个html5有一个叫performance的类可以获取诸如网络延迟,页面加载以及onload event处理时间等信息。
为了使测试能够自动化,我需要在用javascript获取这些信息之后用其他工具把他记录下来,一般来说,获取javascript脚本里面的数据可以使用XHR技术将数据发送到服务器上面去,但是我不想自己搭建一个webserver。一个比较简单的办法就是把这些信息用cookie的形式记录下来,然后在其他程序读取cookie信息即可。
以下是Javascript操作cookie的代码:
function createCookie(name, value, days) { if (days) { var date = new Date(); date.setTime(date.getTime()+(days*24*60*60*1000)); var expires = "; expires="+date.toGMTString(); } else var expires = ""; document.cookie = name+"="+value+expires+"; path=/"; } function readCookie(name) { var ca = document.cookie.split(';'); var nameEQ = name + "="; for(var i=0; i < ca.length; i++) { var c = ca[i]; while (c.charAt(0)==' ') c = c.substring(1, c.length); //delete spaces if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length); } return null; } function eraseCookie(name) { createCookie(name, "", -1); }
IE下读取cookie用wininet API中的InternetGetCookie即可。需要注意的是第一个参数lpszUrl。我做测试的时候是在本机上面写了一个 html页面,在这个页面里面用javascript设置了cookie。从ie临时文件夹可以看到,cookie文件的名字叫cookie:zhijun.peizj@~~local~~/。其他的网站的cookie文件名叫cookie:zhijun.peizj@163.com/。 如下图所示:
所以我猜测这个url参数应该使用~~local~~, 但是发现函数调用失败,返回值是12006,也就是ERROR_INTERNET_UNRECOGNIZED_SCHEME。尝试使用了local, 127.0.0.1都无效。后来发现这篇文章http://www.cnblogs.com/huqingyu/archive/2008/11/27/1342256.html, 知道需要加上http头,于是试过http:// ~~local~~, http://local, http://local.com, http://127.0.0.1 都发现无效。最后再次读上面那篇文章,发现下面有一个微软的员工的回答:that the URL field is the url that the user navigates to when browsing to a site. 于是想起再次用ie去打开那个html文件,发现地址栏是file:///C:/Users/zhijun.peizj/Desktop/performance.html。 重新使用file:///作为URL,发现函数调用成功!
webkit下面则没有API可以使用,就chrome浏览器来说,cookie是记录在一个cookies的文件里面,里面是一个sqlite的数据库,所以要想拿到cookie,可以直接读这个数据库。正常的地址在 C:\Users\%username%\AppData\Local\Google\Chrome\User Data\Default\Cookies