单击按钮 - Web Extension API删除Cookie

时间:2017-11-18 09:48:21

标签: javascript cookies firefox-webextensions

我第一次使用Firefox Web Extension API。我想通过单击按钮删除example.com的所有cookie。我有以下代码,但没有得到任何结果。

background.js

function onRemoved(cookie) {
  console.log(`Removed: ${cookie}`);
}

function onError(error) {
  console.log(`Error removing cookie: ${error}`);
}

function removeCookie() {
  var removing = browser.cookies.remove({
    url: "example.com"
  });
  removing.then(onRemoved, onError);
}

browser.browserAction.onClicked.addListener(removeCookie);

的manifest.json

{

 "description": "RemoveCookie",
 "manifest_version": 2,
 "name": "remove-cookies",
 "version": "1.0",
 "icons": {
 "48": "icons/icon.png"
 },

"background": {
 "scripts": ["background.js"]
},

"browser_action": {
  "default_icon": "icons/icon.png",
  "default_title": "Remove Cookie!"
},

"permissions": [
 "*://*.example.com/*",
 "cookies"
]
}

1 个答案:

答案 0 :(得分:0)

来自https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/cookies/remove

  

Cookie API的remove()方法会根据其名称和URL删除Cookie。

这意味着您还需要指定name参数。

此外,url参数必须包含协议,否则承诺只会以null解析(意味着找不到cookie)。

  

如果找不到与details参数匹配的cookie,则使用null实现promise。

话虽这么说,您可以使用browser.cookies.getAll获取给定网址的所有Cookie,然后删除每个名称的Cookie:

function onRemoved(cookies) {
  console.log('Removed', cookies);
}

function onError(error) {
  console.log(`Error removing cookie: ${error}`);
}

function removeCookie() {
  var url = "http://example.com"; // NOTE the full url including protocol
  browser.cookies.getAll({ url: url })
  .then(function(cookies) {
    return Promise.all(cookies.map(function(cookie) {
      return browser.cookies.remove({ url: url, name: cookie.name });
    }));
  })
  .then(onRemoved, onError);
}

browser.browserAction.onClicked.addListener(removeCookie);