关于 creating-bookmarklets
指导创建和交付浏览器书签脚本的技能,涵盖代码格式、安装说明和测试检查,适用于制作可从浏览器书签运行的小型脚本。
主要功能
- 01使用 IIFE 包装并添加 javascript: 前缀
- 02仅使用块注释
- 03整理易读的源代码
- 04提供安装器或生成安装链接
- 05检查兼容性和错误处理
适用场景
- 01创建提取网页数据的书签脚本
- 02制作复制网页内容的书签脚本
- 03交付可直接安装的浏览器脚本
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ oaustegard/ claude-skills --skill creating-bookmarklets安装后在 Claude Code 中输入/creating-bookmarklets确认已加载。
附带文件README.md
详细介绍
书签脚本创建
关键要求
注释风格——绝对要求
仅使用 /* */ 注释。绝不使用 // 注释。
书签脚本的执行上下文无法处理 // 风格的注释。所有注释都必须使用块注释格式。
/* ✓ Correct */
const x = 5; /* inline */
/* ✗ Wrong - breaks bookmarklets */
// const x = 5;
const y = 10; // inline
IIFE 包装
所有书签脚本都必须使用 IIFE 包装:
(function() {
/* bookmarklet code */
})();
协议前缀
所有交付的书签脚本都必须以 javascript: 协议开头:
javascript:(function() {
/* bookmarklet code */
})();
这样代码就可以立即使用,无需在安装时手动修改。
工作流
1. 生成格式整齐的代码
创建易读的源代码,要求:
- 使用 2 个空格缩进
- 使用描述性变量名
- 为关键部分添加块注释
- 逻辑结构清晰
- 在代码前添加
javascript:协议
带有 javascript: 前缀的版本会存储在 GitHub 并展示给用户,可直接安装,无需手动修改。
2. 提供安装方式
默认方式——引用安装器:
Install: https://austegard.com/web-utilities/bookmarklet-installer.html
安装器负责:
- 使用 Terser 进行压缩
- 对 URL 进行编码
- 生成可拖动的链接
- 集成 GitHub 仓库
替代方式——通过程序生成链接: 如有需要,使用 Terser.js 创建可安装链接:
async function createBookmarkletLink(code, title) {
const minified = await Terser.minify(code);
const encoded = encodeURIComponent(minified.code).replace(/'/g, "%27");
return `<a href="javascript:${encoded}">${title}</a>`;
}
需要:<script src="https://cdn.jsdelivr.net/npm/terser/dist/bundle.min.js"></script>
3. 交付内容
始终提供:
- 带有
javascript:协议前缀的格式整齐的源代码 - 安装方式(安装器链接或生成的链接)
- 功能简介
- 使用说明
交付的代码应可直接使用——用户应能复制整个代码块(包括 javascript:),无需修改。
代码规范
错误处理
(function() {
try {
/* main logic */
} catch (error) {
console.error('Bookmarklet error:', error);
alert('Operation failed: ' + error.message);
}
})();
控制台日志
默认包含调试跟踪信息:
console.log('Bookmarklet: Starting');
/* operations */
console.log('Bookmarklet: Complete');
用户反馈
/* Success */
alert('✓ Content copied to clipboard');
/* Error */
alert('✗ Failed to access clipboard');
常见模式
DOM 操作
(function() {
const element = document.querySelector('.target');
if (!element) {
alert('Element not found');
return;
}
/* manipulate element */
})();
数据提取
(function() {
const data = Array.from(document.querySelectorAll('.item'))
.map(item => ({
title: item.querySelector('.title')?.textContent.trim(),
value: item.querySelector('.value')?.textContent.trim()
}));
console.log('Extracted:', data);
})();
剪贴板操作
(function() {
const text = 'content to copy';
navigator.clipboard.writeText(text)
.then(() => alert('✓ Copied'))
.catch(err => {
console.error('Clipboard error:', err);
alert('✗ Copy failed');
});
})();
动态加载库
(function() {
if (typeof someLibrary === 'undefined') {
const script = document.createElement('script');
script.src = 'https://cdn.example.com/library.js';
script.onload = function() {
/* proceed with logic */
};
document.head.appendChild(script);
}
})();
浏览器兼容性
为不支持的功能提供回退方案:
if (!navigator.clipboard) {
alert('Clipboard API not supported');
return;
}
限制
不能使用:
- 未嵌入的外部文件(CSS、图片)
- 构建工具或预处理
//风格的注释
可以使用:
- Fetch API
- localStorage/sessionStorage
- 现代浏览器 API
- CDN 库(动态加载)
测试
交付前:
- 确认不存在
//注释 - 在浏览器控制台中测试,并使用 IIFE 包装
- 检查 DOM 元素缺失时的错误处理
- 验证所有情况下的用户反馈
输出示例
javascript:(function() {
/* Pretty-printed bookmarklet code */
})();
Install: https://austegard.com/web-utilities/bookmarklet-installer.html
Extracts all links from current page and copies to clipboard as markdown list. Works on any webpage.
GitHub 存储
用户仓库:https://github.com/oaustegard/bookmarklets
格式整齐的格式符合存储要求。安装器会直接从此仓库加载。
评论
支持 Markdown