官方demo:browsingData
使用的api
删除浏览数据需要使用chrome.browsingData
,这里只按照官方demo,仅介绍一下 chrome.browsingData.remove
其他内容自行查看官方文档
使用 chrome.browsingData
API 从用户的本地配置文件中删除浏览数据。
声明
需要在manifest.json
进行权限声明:
{
"name": "My extension",
...
"permissions": [
"browsingData",
],
...
}
chrome.browsingData.remove
此 API 的最简单用例是一种用于清除用户浏览数据的基于时间的机制。您的代码应提供一个时间戳,指示应删除用户浏览数据的历史日期。这个时间戳被格式化为自 Unix 纪元以来的毫秒数(可以通过 getTime 方法从 JavaScript 日期对象中检索)
例如,清除近一周的浏览数据
//删除近一周浏览数据
$("#browsing").click((e) => {
//一周的毫秒数
var millisecondsPerWeek = 1000 * 60 * 60 * 24 * 7;
//计算起始时间
var oneWeekAgo = new Date().getTime() - millisecondsPerWeek;
chrome.browsingData.remove(
{
since: oneWeekAgo,
},
{
appcache: true, // 网站的应用程序缓存
cache: true, //浏览器的缓存
cacheStorage: true, // 缓存存储
cookies: true, // cookies
downloads: true, // 浏览器的下载列表
fileSystems: true, // 网站的文件系统
formData: true, // 浏览器存储的表单数据。
history: true, // 浏览器的历史记录
indexedDB: true, // 网站的 IndexedDB 数据
localStorage: true, // 网站的本地存储数据
passwords: true, // 存储的密码。
serviceWorkers: true, // 服务工作者
webSQL: true, //网站的 WebSQL 数据
},
() => {
$("#content").html("删除成功!");
}
);
});
这个挺有意思的,看一下官方插件的效果,不允许请求图片
API:chrome.contentSettings
使用 chrome.contentSettings API 更改控制网站是否可以使用 cookie、JavaScript 和插件等功能的设置。更一般地说,内容设置允许您基于每个站点而不是全局自定义 Chrome 的行为。
声明权限
{
"name": "My extension",
...
"permissions": [
"contentSettings",
"tabs"
],
...
}
demo
var incognito;
var url;
$(function () {
//显示设置
$("#settings").click((e) => {
//获取当前激活的tab
chrome.tabs.query({ active: true, currentWindow: true }, (tabs) => {
var current = tabs[0];
// incognito和url是全局变量;
incognito = current.incognito;
url = current.url;
// cookie、图像、JavaScript、位置、插件、通知、麦克风、摄像头、自动下载
var types = [
"cookies", "images", "javascript", "location", "popups", "notifications",
"microphone", "camera", "automaticDownloads",];
//获取支持的权限
types.forEach(type => {
chrome.contentSettings[type] && chrome.contentSettings[type].get({
'primaryUrl': url,
'incognito': incognito
},
function (details) {
document.getElementById(type).disabled = false;
document.getElementById(type).value = details.setting;
});
});
})
//给每一个下拉添加一个监听
var selects = document.querySelectorAll('select');
for (var i = 0; i < selects.length; i++) {
selects[i].addEventListener('change', settingChanged);
}
});
});
function settingChanged() {
//设置
var type = this.id;
var setting = this.value;
var pattern = /^file:/.test(url) ? url : url.replace(/\/[^\/]*?$/, '/*');
console.log(type+' setting for '+pattern+': '+setting);
chrome.contentSettings[type].set({
'primaryPattern': pattern, // url的匹配模式
'setting': setting, //选项 cookie、images等内容
'scope': (incognito ? 'incognito_session_only' : 'regular') //范围
});
}
popup.html
<fieldset>
<dl>
<dt><label for="cookies">Cookies: </label></dt>
<dd>
<select id="cookies" disabled>
<option value="allow">Allow</option>
<option value="session_only">Session only</option>
<option value="block">Block</option>
</select>
</dd>
<dt><label for="images">Images: </label></dt>
<dd>
<select id="images" disabled>
<option value="allow">Allow</option>
<option value="block">Block</option>
</select>
</dd>
<dt><label for="javascript">Javascript: </label></dt>
<dd>
<select id="javascript" disabled>
<option value="allow">Allow</option>
<option value="block">Block</option>
</select>
</dd>
<dt><label for="location">Location: </label></dt>
<dd>
<select id="location" disabled>
<option value="allow">Allow</option>
<option value="ask">Ask</option>
<option value="block">Block</option>
</select>
</dd>
<dt><label for="plugins">Plugins: </label></dt>
<dd>
<select id="plugins" disabled>
<option value="allow">Allow</option>
<option value="block">Block</option>
</select>
</dd>
<dt><label for="popups">Pop-ups: </label></dt>
<dd>
<select id="popups" disabled>
<option value="allow">Allow</option>
<option value="block">Block</option>
</select>
</dd>
<dt><label for="notifications">Notifications: </label></dt>
<dd>
<select id="notifications" disabled>
<option value="allow">Allow</option>
<option value="ask">Ask</option>
<option value="block">Block</option>
</select>
</dd>
<dt><label for="microphone">Microphone: </label></dt>
<dd>
<select id="microphone" disabled>
<option value="allow">Allow</option>
<option value="ask">Ask</option>
<option value="block">Block</option>
</select>
</dd>
<dt><label for="camera">Camera: </label></dt>
<dd>
<select id="camera" disabled>
<option value="allow">Allow</option>
<option value="ask">Ask</option>
<option value="block">Block</option>
</select>
</dd>
<dt>
<label for="unsandboxedPlugins">Unsandboxed plugin access: </label>
</dt>
<dd>
<select id="unsandboxedPlugins" disabled>
<option value="allow">Allow</option>
<option value="ask">Ask</option>
<option value="block">Block</option>
</select>
</dd>
<dt><label for="automaticDownloads">Automatic Downloads: </label></dt>
<dd>
<select id="automaticDownloads" disabled>
<option value="allow">Allow</option>
<option value="ask">Ask</option>
<option value="block">Block</option>
</select>
</dd>
</dl>
</fieldset>