2017-11-18 236 views
1

我首次使用Firefox Web擴展API。我想通過點擊一個按鈕來刪除example.com的所有cookies。我有以下代碼,但沒有得到任何結果。通過點擊按鈕刪除Cookie - 網絡擴展程序API

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" 
] 
} 

回答

0

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

餅乾API的remove()方法刪除一個cookie,它的名字和網址。

這意味着您還需要指定name參數。

此外,url參數必須包含該協議或承諾將只與null(意思是不能找到cookie)解決。

如果無法找到與詳細信息參數匹配的cookie,則承諾將使用null實現。


話雖這麼說,你可以用browser.cookies.getAll以獲取給定的URL所有的餅乾,然後刪除每個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); 
+0

THX該解決方案! – HeScm

+0

@HeScm太棒了!考慮接受答案,如果它適合你 – Maluen