在JavaScript中读取cookie的最短,准确和跨浏览器兼容的方法是什么?
通常,在构建独立脚本(我不能拥有任何外部依赖项)时,我发现自己添加了一个用于读取cookie的函数,并且通常会回退到QuirksMode.orgreadCookie()方法(280字节,216缩小).
function readCookie(name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for(var i=0;i < ca.length;i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1,c.length);
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
它完成了这项工作,但它的丑陋,每次都增加了相当多的膨胀.
jQuery.cookie使用这样的方法(修改,165字节,125缩小):
function read_cookie(key)
{
var result;
return (result = new RegExp('(?:^|; )' + encodeURIComponent(key) + '=([^;]*)').exec(document.cookie)) ? (result[1]) : null;
}
Run Code Online (Sandbox Code Playgroud)
请注意,这不是"Code Golf"竞赛:我有理由减少readCookie功能的大小,并确保我的解决方案有效.
我有一个网页(由JSF制作),其中一些链接允许用户获取PDF文件.
当用户点击这样的链接时,会显示一个等待弹出窗口(它是一个模态面板)(因为PDF的生成可能很长),并且一旦创建了文件,IE就会显示建议的"文件下载"弹出窗口"打开","保存"和"取消"选项.
当这个弹出窗口关闭时,即当用户保存(或打开)PDF文件时,Javascript是否有办法从我的网页中知道?
为了更精确一点,在显示PDF文件链接的网页中,会显示一个模态弹出窗口("等待弹出窗口"),以使用户等待"文件下载"弹出窗口.问题是当用户保存(或打开)PDF文件时,"文件下载"弹出窗口关闭,但用户然后"返回"到原始网页,同时仍显示等待弹出窗口.
请注意,我的应用程序仅在IE6中运行,因此我不反对IE(6) - 仅解决方案...
对于需要jQuery的解决方案我也没问题;)
编辑: 如果存在一个解决方案来捕获任何在向用户显示"文件下载"弹出窗口时触发的事件(即在用户选择保存,打开或取消之前),那么对我来说也没关系!