很多功能小工具都可以简单移植到 Chrome Extension 上,既能直达用户,又能节省前端开发成本,何乐而不为。...你还可以通过 active: false 参数将标签页设置为后台打开,不打扰用户当前的浏览行为。...如果在针对 Tab 的开发中,还可以使用 TabId 来进行更新: chrome.tabs.update(window.tabs[1].id, {active: true}); 关闭标签页 关闭标签页使用...获取当前活动标签页 通过 chrome.tabs.query(),你可以轻松获取当前窗口中活动的标签页: chrome.tabs.query({ active: true, currentWindow:...避免内存泄露:确保对事件监听器和回调函数进行适当的清理,防止占用系统资源。 用户体验优化:合理的 UI 设计和标签页的交互操作,能够提升用户的使用体验,减少对他们日常浏览的干扰。
,这个窗口用于调试插件。...({active: true, currentWindow: true}, function(tabs) { var url = tabs[0].url; chrome.cookies.getAll...({active: true, currentWindow: true}, function(tabs) { var url = tabs[0].url; chrome.cookies.getAll...({active: true, currentWindow: true}, function(tabs) { var url = tabs[0].url; chrome.cookies.getAll...'; ' : ''); } // 将获取到的 cookie 复制到剪切板 navigator.clipboard.writeText(cookiesText
,会从扩展界面的 DOM 上将修改后参数取出拼好,并且通过 Chrome 的消息传递机制 传递给 Content scripts,然 后 Content scripts 拿到新的参数,赋值给当前浏览器窗口页面的...chrome扩展程序将后台网页分为两种类型: 1.持续运行的后台网页 2.事件页面 是否持久存在是事件页面与后台网页之间的根本区别。...result: 0 }; // 发送消息 chrome.tabs.query({ active: true, currentWindow: true }, function(tabs) { chrome.tabs.sendMessage...使用 chrome.tabs.query({ active: true, currentWindow: true }, function(tabs) {}) 则能正确选中当前打开的标签页。...将扩展程序打包上线发布到 Chrome 应用商店 扩展程序开发好了,希望供他人下载。那么当然需要发布到应用商店。流程大致如下: 登录到 Chrome 开发者信息中心。
运行于一个独立、隔离的环境,它不会和主页面的脚本或者其他插件的内容脚本发生冲突 有2种方式添加content脚本 在配置中设置 "content_scripts": [ { "js": [...动态配置注入 在特定时刻才进行注入,比如点击了某个按钮,或者指定的时刻 需要在popup.js或background.js中执行注入的代码。...此示例适用于 Service Worker、弹出式窗口和作为标签页打开的 chrome-extension:// 页面 (async () => { const [tab] = await chrome.tabs.query...({active: true, lastFocusedWindow: true}); const response = await chrome.tabs.sendMessage(tab.id, {...({active: true, lastFocusedWindow: true}); return tab; } notifications消息通知 Chrome提供chrome.notifications
序号 类型 描述 1 manifest 扩展程序的清单是唯一必须具有特定文件名的必需文件: manifest.json 。 它还必须位于扩展程序的根目录中。...有多种类型的事件,例如导航到新页面、删除书签或关闭选项卡。...它可以使用所有的Chrome API,但不能直接与网页内容交互;这就是内容脚本的工作 4 popup/page 扩展可以包含各种 HTML 文件,例如弹出窗口、选项页面和其他 HTML 页面。...先配置(指向服务工作者文件) { "background": { "service_worker": "background.js" } } 后编写 监听onInstalled事件,更新插件徽章文案...: true }); await chrome.windows.update(tab.windowId, { focused: true }); }); elements.add
) 使用override页可以将Chrome默认的一些特定页面替换掉,改为使用扩展提供的页面。...({active: true, currentWindow: true}, function(tabs) { if(callback) callback(tabs.length ?...或者popup.js: function sendMessageToContentScript(message, callback) { chrome.tabs.query({active: true...获取当前标签页ID 一般有2种方法: // 获取当前选项卡ID function getCurrentTabId(callback) { chrome.tabs.query({active: true...() { chrome.windows.getCurrent(function(currentWindow) { chrome.tabs.query({active: true, windowId
chrome扩展程序将后台网页分为两种类型: 持续运行的后台网页 事件页面 是否持久存在是事件页面与后台网页之间的根本区别。...从 Content Script 向 background 事件页面 传递消息 Content Script ,即是注入页面的脚本 # contentScript.js // 发送消息 chrome.runtime.sendMessage...result: 0 }; // 发送消息 chrome.tabs.query({ active: true, currentWindow: true }, function(tabs) {...使用 chrome.tabs.query({ active: true, currentWindow: true }, function(tabs) {}) 则能正确选中当前打开的标签页。...将扩展程序打包上线发布到 Chrome 应用商店 扩展程序开发好了,希望供他人下载。那么当然需要发布到应用商店。流程大致如下: 登录到 Chrome 开发者信息中心。
在后面的浏览器插件案例中笔者会详细介绍content_scripts的用法. 2.4 popup popup是用户点击插件图标时打开的一个小窗口,当失去焦点后窗口就立即关闭,我们一般用它来处理一些简单的用户交互和插件说明...由于popup窗口也是一个网页,所以我们一般会建立一个popup.html和popup.js用来控制popup的页面展示和交互.我们在manifest.json中配置如下: { "page_action...// 发送消息给content_script chrome.tabs.query({active: true, currentWindow: true}, function(tabs) { chrome.tabs.sendMessage...({active: true, currentWindow: true}, function(tabs) { chrome.tabs.sendMessage(tabs[0].id, "activeBtn...第二步,将图片数据存储到storage中: chrome.storage.sync.set({'imgArr': imgArr}, function() { console.log('保存成功'
://*.wmcweb.cn/*", "" ] } ] background增强浏览器事件程序的js...('received user data', response); }); popup.js向content.js通信 在popup页面需要查找当前激活的tabs // popup.js chrome.tabs.query...({ active: true, currentWindow: true }, function (tabs) { chrome.tabs.sendMessage(tabs[0].id,...heightValue } chrome.action.setBadgeText({ text: inputColorValue }); // 扩展脚本向content发出信息 chrome.tabs.query...({ active: true, currentWindow: true }, function (tabs) { console.log(tabs) chrome.tabs.sendMessage
,然后就是以每个域名为 key 的每个域名访问了多少时间的表,虽然逻辑上并不需要用这个字典,但将来可以扩展成特定的网站每天或者每周给予特定的访问时长。...({active: true, lastFocusedWindow: true}, function(tabs){ if (tabs.length == 1){...tab Update,Activated,还有 windows focus Changed,把checkCurrentTab() 函数绑到这三个事件上。...idle.onStateChanged 从电脑休眠中苏醒和恢复时,记录一下 idle 状态,同时如果是从休眠到 active 的状态,等同于 windows focus Changed 事件。...("minute_check"); getCurrentTabDomin(); } } }) 每天零点触发清空 localStorage 程序 除了特定事件发生会触发检查当前
本文将介绍大家手动开发一个谷歌浏览器插件获取cookies. 1.Chrome插件开发文档 https://developer.chrome.com/docs/extensions/mv3/ 2.官网入门...在开发插件时,不能将 js 代码直接写在 html 文件里,否则会报错,必须要单独新建一个 js 文件,然后通过 script 标签引用该文件;通过在popup.js内调用chrome获取cookies...的API来获取所访问网页的cookies,并把结果展示到popup.html弹窗内部; 图片 const $container = document.getElementById('container...HTML加载完成 document.addEventListener('DOMContentLoaded', () => { // chrome.tabs 读取浏览器已打开的tab页签,其中'active...': true访问到的是当前所处的标签页 // WINDOW_ID_CURRENT 当前标签页id chrome.tabs.query({ 'active': true, 'windowId
."); } }); }); 打开新窗口事件: 你可以通过监听 chrome.windows.onCreated 事件来知道新窗口打开。...."); }); 关闭窗口事件: 你可以通过监听 chrome.windows.onRemoved 事件来知道窗口关闭。...({ active: true, currentWindow: true }, function(tabs) { chrome.tabs.sendMessage(tabs[0].id, { action...插件发布与维护 在开发完成后,将插件发布到Chrome Web Store是使其可供用户下载和安装的关键步骤。同时,对于已发布的插件,维护和管理也是非常重要的。以下是关于插件发布与维护的详细内容。...在Chrome Web Store发布和更新插件 将插件发布到Chrome Web Store可以让用户轻松找到、安装和使用插件。以下是发布和更新插件的步骤: 登录到Chrome开发者控制台。
: DOMContentLoaded事件触发后立即执行 // document_idle: 在load之前触发 }, ], // 权限申请..."], "run_at": "document_start" }, ] 直接将脚本注入到页面中,但是也可以包含CSS文件,但是在注入CSS文件时,要小心...content-scripts中的JS程序和原始页面共享DOM,但是和原始页面的JS不是在同一个环境下运行的,所以我们是无法访问到原始页面中定义的变量的因为是是注入到页面中的,所以在安全策略上不能访问大部分的...param callback - 获取到id后要执行的回调函数 */ function getCurrentTabId(callback) { // 查询所有在当前浏览器打开的活动的tab chrome.tabs.query...({active: true, currentWindow: true}, function (tabs) { if (callback) { callback(
将manifest.json文件放到一个文件夹内。 chrome://extensions/ 在浏览器地址栏输入chrome://extensions/打开“拓展程序”页面。.../js/content.js"], // css引入需谨慎,因为可能会影响全局的样式,同样也能接收多个css文件,会按顺序插入到页面中 "css": ["....这个方法查找到tab,再使用chrome.tabs.sendMessage 方法给tab发消息: // {active: true, currentWindow: true} 表示查找当前屏幕下的active...状态的tab; chrome.tabs.query({active: true, currentWindow: true}, function (tabs) { chrome.tabs.sendMessage...注意:因为涉及到网络请求,所以需在manifest.json中添加权限: { ...
,如果为all,则收集所有图片,为attr则只收集属性图 * @param attr {string} 用;分隔开的属性规则 */ sendMessage(action, attr) { chrome.tabs.query...({ active: true, currentWindow: true }, (tabs) => { chrome.tabs.sendMessage(tabs[0].id, { action...sendMessage向页签发送action和配置的属性值,如果action为'all'则是收集所有图片,如果为'attr',则只收集所配置的属性图片,resetImgContainer方法只是简单地将容器置空...而在content script中,则用onMessage来接收popup的信息,并将收集到的图片数组返回给popup // 接收popup的指令,如果action为all,则获取所有图片url,如果为...) } 调用谷歌插件的download方法来进行图片下载,本来想搞个批量下载的,但是没有发现谷歌插件有提供批量下载的API,如果遍历所选中的图片列表,不断调用download方法,会一下子弹出很多保存窗口
而我们这次的消息传递有点击popup.html里隐藏或显示按钮时,将状态传递给content script,content script将页面所有图片隐藏并且把状态传给background.js,永久保存起来...popup.js $("input:radio[name='options']").change(function () { chrome.tabs.query({active: true..., currentWindow: true}, function (tabs) { chrome.tabs.sendMessage(tabs[0].id, {name: "toggleImages...$(self).hide().attr("src", originSrc + "null"); self.loaded=true...state == "hide" || state == "show") { $("input:radio#" + state).parent('label').addClass('active
"content_scripts": [ // 这里配置的脚本和样式将直接按顺序注入到影响的页面中 { "matches": ["http://www.google.com/*"],...scrollTop: data.pageY }, 1000); } }); } function bindEvents() { // 事件和消息...obj); chrome.storage.sync.set(obj, function() { //console.log('send callback'); chrome.tabs.query...({ // 查找当前tab active: true, currentWindow: true }, function(tabs) { /...({ // 查找当前激活的标签tab active: true, currentWindow: true
name "name": "Close Same Domain Tabs" 描述:插件的名称,将显示在Chrome扩展管理页面和插件商店中。...] 描述:定义内容脚本,注入到指定页面中。...backgroud.js 在谷歌插件开发中,background.js 扮演着非常重要的角色,它主要用于处理插件的后台逻辑和事件监听。...管理和控制标签页 查询标签页:通过 chrome.tabs.query 方法,可以获取当前窗口中的所有标签页,从而实现对标签页的管理和操作。...优化资源使用 谷歌浏览器对每个插件运行的后台页面有资源使用限制,background.js 的设计需要考虑到优化资源使用,避免长时间占用过多的内存和CPU,以确保不影响用户的浏览体验。
我不甘心啊,马上升级了 Chrome 到最新的版本依然不行,仔细看了外媒以后发现,仅 Chrome Canary 版本支持这个功能,Chrome Canary 版是啥?...于是我们写了一个新代码,获取到当前 active 的页面,然后发送消息给当前的页面。...function getCurrentTabId(callback) { chrome.tabs.query({ active: true, currentWindow: true }, function...我们简单改造一下 qrcode 方法,把我们获取的uri 发送到当前 active 的 tab function qrcode(info, tab) { var uri = info.pageUrl...首先我们需要定义一个新的js 文件,使用 manifest.json 配置到页面,简单点说就是让 active 页面自动引入这个js,同时我们也通过这种方式把 qrcode 的依赖引入页面。
遍历每个窗口,检查并处理特定的窗口关闭条件。 确认每个窗口的第一个标签页是否是预期的,如果不是,则在该窗口中创建一个新的标签页。...通过这些操作,确保所有窗口都包含特定的标签页,并进行必要的检查和处理。...如果第一个标签页不是预期的,则在该窗口中创建一个新的标签页。 通过这些操作,确保在每次创建新窗口时,都包含特定的标签页。...) { if (window.tabs[0].active === true && window.tabs.length > 1) { setTimeout...延迟 300 毫秒后,获取新标签页所在窗口的详细信息。 调用 checkWindowClose 函数对该窗口进行检查。 通过这些操作,确保在新标签页创建后,对其所在的窗口进行特定的检查和处理。