chrome 扩展开发说容易,但麻烦,每迭代一次代码,就需要重新加载扩展,这里点点、那里点点,重复的工作量太多。
如果是更新 popup 的话,直接刷新就能看效果。但如果更新 background.js,就需要点好几下、切换多个窗口进行操作。
于是发现:刷新后台window,可以重新加载扩展逻辑。而调用 chrome.runtime.reload()
,则是完全重新加载。当资源文件(比如翻译)修改的时候,就需要完全重新加载。
进一步思考,怎么用ahk省去这些繁琐的步骤呢? 有多种方法。
1. 在右键菜单中添加调试条目。
if(_DEBUG) {
menu.create({
id: 'reload',
title: '重新加载(&z)',
contexts: ['browser_action', 'page_action']
}, () => {});
menu.create({
id: 'reload1',
title: '完全重新加载(&x)',
contexts: ['browser_action', 'page_action']
}, () => {});
}
注意看,菜单的标题末尾故意添加了一个快捷访问字母 &x 、 &z。当菜单出现的时候,可以敲键盘上的字母,而不是移动鼠标。
AHK 自动点击快捷键字符
可以让ahk检测右键弹窗,
鼠标中键点击菜单时,让AHK自动发送快捷字符。
这样就十分便捷了,无需寻找菜单项目。
这个技巧,也可以用于其他右键菜单里,正常的功能,比如加速翻译菜单。
问题关键是,如何用ahk检测鼠标中键点击的是右键弹窗。
AHK 检测浏览器右键弹窗的方法。
办法有了两个:
-
chrome 右键弹窗的窗口class为:Chrome_WidgetWin_2,可以检测。
-
edge 的 窗口class仍然为 Chrome_WidgetWin_1,无法区分。只能通过窗口宽度来检测。、
没有特别精确的方法。
2. 扩展中添加快捷指令
chrome.commands.onCommand.addListener(function(command) {
console.log('Command:');
});
关于调试插件页面时,有时需要完全重新加载
无限书签扩展除了popup弹窗,还能以普通标签页的形式打开。
有时修改了资源文件,比如翻译,就需要一次完全重新加载,才能读取。
当完全重新加载时,浏览器会自动关闭插件页面,导致需要开发者重新打开。有没有办法让它自动打开回来呢!?
可以配合 userscript 脚本实现:
Redirect.user.js
// ==UserScript==
// @name Redirect
// @namespace http://tampermonkey.net/
// @version 0.1
// @description try to take over the world!
// @author You
// @match http://127.0.0.1:8080/*redirect=*
// @run-at document-end
// @icon data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant GM_openInTab
// ==/UserScript==
(function() {
'use strict';
setTimeout(()=>{
var url = decodeURIComponent(location.href.slice(location.href.indexOf('redirect=')+'redirect='.length));
var recreate = url[0]=='c';// fuck google
if(recreate) {
GM_openInTab(url, { active: true });
window.close()
} else {
location.href = url;
}
}, 250);
})();
扩展里这样写完全重新加载的逻辑:
chrome.tabs.query({active: true, currentWindow: true}, function(tab) {
tab = tab[0];
if(tab.url.includes(chrome.runtime.id) ) {
// chrome.tabs.create({ url: "chrome-extension://nhhjofjjocbbdlelbabijdgmlkgienhl/js/popup/popup_index.html", index: tab.index + 1});
chrome.tabs.create({ url: `http://127.0.0.1:8080/base/0?wait=1&redirect=chrome-extension://${chrome.runtime.id}/js/popup/popup_index.html`, index: tab.index + 1});
}
chrome.runtime.reload();
});
当检测到当前页面是扩展页面时,构造一个url,先打开新tab,再重新加载插件。从而,当用户脚本检测到重定向目标时,就会延时200毫秒,最后打开目标url,即可恢复先前,正在调试的插件页面。
put together 看看效果吧!
解说:
gif动图中,演示了两次重新加载,第一次是刷新后台页面,不完全重新加载,使插件页面自动刷新。
第二次是完全重新加载,浏览器自动关闭标签页,旋即恢复。
注意两次重新加载的时候,我都没有用鼠标左键单击菜单项所在位置,而是用鼠标中键随便点击一个位置,非常迅捷。
关于无限书签扩展
以下由chatglm总结,还挺准的:
随着上网时间的增加,我们浏览器的书签数量也逐渐增多,如何有效地管理这些书签成为了一个问题。针对这个问题,我设计了一款名为“无限书签”的 Chrome 扩展,通过双层标签页结构和强大的右键菜单等功能,帮助用户更好地管理和使用书签。
无限书签的界面由三个部分组成:顶层分组、小页面标签栏和小页面内容。顶层分组可以任意命名,右键新建分组;小页面标签栏可以快速切换不同类型的小页面,而小页面内容则可以根据用户需求自由定制。
在无限书签中,书签可以分为五大类型:书签、重要页面、搜索引擎、嵌入网站和自定义页面。其中,书签小页面由地址栏和列表组成,地址栏包括地址栏、文件夹内部的搜索框、回顶按钮、到底按钮、收藏与定位按钮、逆序按钮等功能。通过收藏与定位按钮,用户可以轻松地将书签收藏并定位到指定文件夹。
此外,无限书签还提供了强大的右键菜单功能,用户可以在列表上右击,实现添加或移动收藏、管理书签、导航菜单等多种操作。为了方便用户跨文件夹管理书签,无限书签还支持拖拽排序功能,用户只需轻轻一拖拽,然后滚动列表至期望位置,最终左键确认修改,或者右键取消。
总之,无限书签是一款实用且强大的书签管理工具,通过双层标签页结构和强大的右键菜单等功能,帮助用户轻松管理和使用书签,让上网变得更加便捷。
原文在这儿:Chrome 有什么好的书签管理插件? - 知乎