Javascript 从Firefox扩展(XUL)读取网页cookie
我正在为Firefox浏览器创建一个扩展。我想读一个cookie,它是由一个HTML页面在XUL文件中使用JavaScript设置的。可能吗 我尝试使用Javascript 从Firefox扩展(XUL)读取网页cookie,javascript,firefox,cookies,firefox-addon,xul,Javascript,Firefox,Cookies,Firefox Addon,Xul,我正在为Firefox浏览器创建一个扩展。我想读一个cookie,它是由一个HTML页面在XUL文件中使用JavaScript设置的。可能吗 我尝试使用document.cookie,但不起作用: function readCookie(name) { var ca = document.cookie.split(';'); var nameEQ = name + "="; for(var i=0; i < ca.length; i++) { var c = ca[i]
document.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);
}
函数readCookie(名称){
var ca=document.cookie.split(“;”);
变量nameEQ=name+“=”;
对于(变量i=0;i
你能帮我吗?提前感谢。您可能需要使用
nsICookieService
界面:
(通过Mozilla上的有用搜索找到:)您可能还想查看使用Cookie的现有扩展,例如,至少有两种不同的方法: 首先,如果您只是想与Firefox cookie商店交互,您可以使用和接口来查询、添加和删除cookie 其次,如果您对
document.cookie方法更为熟悉,并且希望处理已经加载到浏览器中的文档,那么您可以这样做,但需要记住的重要一点是,要使用正确的文档。在XUL代码中仅使用document
时,您指的是与正在运行的浏览器窗口关联的文档对象。此窗口中的不同选项卡中可能会加载多个页面,每个选项卡都有自己的文档对象。因此,您首先需要找到感兴趣的文档对象。例如,这样做的一种方法是注册以获得页面加载的通知,然后在页面加载时检查页面是否感兴趣。例如,您的XUL代码可能如下所示:
function pageLoad (event) {
if (event.originalTarget instanceof HTMLDocument) {
var doc = event.originalTarget;
if (doc.URL.match(/^https?:\/\/[^\/]*\.example\.com\//)) {
⋮
doc.cookie = 'cookie_name' + "=" + value + ";expires=" +
(new Date(2050, 10, 23)).toGMTString();
⋮
}
}
}
var appcontent = document.getElementById("appcontent"); // locate browser
if (appcontent)
appcontent.addEventListener("load", function (e) { pageLoad(e); }, true);
使用这种方法,您可以使用熟悉的机制仅与与该页面关联的cookie交互,而不用担心处理与完全不同的页面关联的cookie。这些代码片段可能会有所帮助
///By this method you can iterate throug each cookie by its name or value...
function ReadCookie()
{
var cookieMgr = Components.classes["@mozilla.org/cookiemanager;1"]
.getService(Components.interfaces.nsICookieManager);
for (var e = cookieMgr.enumerator; e.hasMoreElements();) {
var cookie = e.getNext().QueryInterface(Components.interfaces.nsICookie);
dump(cookie.host + ";" + cookie.name + "=" + cookie.value + "\n");
///Your code here to check your cookie or your implementation...
///You can use cookie name or value to select your cookie...
}
}
///如果你想通过域名读取cookies,你可以使用此代码
function GetCookie(){
try
{
alert("Getting Cookies");
var ios = Components.classes["@mozilla.org/network/io-service;1"]
.getService(Components.interfaces.nsIIOService);
var uri = ios.newURI("http://www.yoursite.com/", null, null);
var cookieSvc =
Components.classes["@mozilla.org/cookieService;1"]
.getService(Components.interfaces.nsICookieService);
var cookie = cookieSvc.getCookieString(uri, null);
///Your logic here...
}
catch (errorInfo)
{
alert(errorInfo);
}
}
希望这些能有所帮助:)谢谢您的回复。这些链接很有用:)谢谢你的回复。您知道如何在xpi格式中查看扩展bcoz的代码吗?您开始遇到一个新问题。。。。一个.xpi刚刚被压缩。用提取器打开它,查看如何创建自己的文件,压缩文件并更改扩展名。