我正在开发一个Firefox插件,允许用户(所有用户都是特定群组的一部分;此插件在受众范围内非常有限)从状态栏查看其身份验证Cookie的状态。我们都必须进行身份验证才能访问与工作相关的站点,但是当cookie过期时我们不会收到任何警告,因此这会导致工作流程中出现烦人且有时严重的中断。最终,这个添加将允许我们从状态栏提交我们的凭据,而不必去做任何重新加载或重定向,但是现在,我只是希望看到它显示状态。
我一直在查看nsICookie,nsICookie2,nsICookieManager等的Mozilla开发人员页面,但它并不清楚它是如何适应JavaScript或XUL或其他任何内容的。
理想情况下,我只是想让JavaScript走出文档并获取我指定的域的cookie字符串。如果我能做到这一点,它将允许代码可能被移植到其他浏览器(特别是Safari和Chrome)。但是,如果这必须是特定于浏览器的,那么我至少想知道检查cookie是否存在于Firefox中的方法,而没有任何设置或删除的功能。
简单地说,我想要一种说法:
if (cookieExists("sample.com", CookieName)) {
alert("You're signed in!");
} else {
alert('Go sign in, you fool!');
}
最简单/最便携的方法是什么(当然是浏览器方面)?
答案 0 :(得分:5)
我一直在查看nsICookie,nsICookie2,nsICookieManager等的Mozilla开发人员页面,并且它没有清楚地了解它是如何适应javascript或XUL或其他任何内容的。
可以访问Firefox扩展中的所有cookie,并使用nsICookieManager和nsICookie接口。从您的扩展程序中的javascript代码,您可以使用
访问Cookie管理器var cookieManager = Components.classes["@mozilla.org/cookiemanager;1"].getService(Components.interfaces.nsICookieManager);
并且您可以遍历所有存储的Cookie
var enum = cookieManager.enumerator;
while (enum.hasMoreElements()){
var cookie = enum.getNext();
if (cookie instanceof Components.interfaces.nsICookie){
// commands
}
}
现在,当引用cookie对象时,您可以检查其属性
cookie.host
cookie.name
cookie.value
...
在nsICookie接口中定义。此代码特定于Firefox,可以作为浏览器扩展或signed script运行。希望我的解释有所帮助。
下面我将介绍在扩展中使用JS XPCOM接口的一些链接:
答案 1 :(得分:4)
您可以使用jquery插件进行cookie处理
http://www.stilbuero.de/2006/09/17/cookie-plugin-for-jquery/
或只是通过javascript: http://www.quirksmode.org/js/cookies.html
答案 2 :(得分:1)
这是 working with cookies in javascript 的精彩教程。使用该教程中的函数,您可能会执行以下操作:
if readCookie(yourCookieName != "") {
alert("You're signed in!");
else {
alert("Go sign in, you fool!");
}
以下是Cookie功能:
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 "";
}
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 eraseCookie(name) {
createCookie(name, "", -1);
}