如何用AutoHotkey绑定快捷键执行刷新样式表的Bookmarklet
解决方法:用AutoHotkey执行刷新样式表的Bookmarklet
你的问题核心有两个:一是原Bookmarklet代码里的HTML实体编码会导致JS执行报错,二是浏览器的安全机制可能拦截通过剪贴板粘贴的javascript:前缀代码。下面是修正后的AutoHotkey脚本,以及问题原因的说明:
正确的AHK脚本
^q:: ; 激活浏览器地址栏 SendInput, ^l ; 短暂等待确保地址栏获得焦点(避免因浏览器响应慢导致输入失效) Sleep, 100 ; 发送修正后的Bookmarklet代码(直接输入而非剪贴板,避开浏览器拦截) SendInput, javascript:(function(){var h,a,f;a=document.getElementsByTagName('link');for(h=0;h<a.length;h++){f=a[h];if(f.rel.toLowerCase().match(/stylesheet/)&&f.href){var g=f.href.replace(/(&|%5C?)forceReload=\d+/,'');f.href=g+(g.match(/\?/)?'&':'?')+'forceReload='+(new Date().valueOf())}}})() ; 执行代码 SendInput, {Enter} Return
为什么之前的尝试失败?
- HTML实体编码问题:你用的Bookmarklet是网页上显示的版本,里面的
<(对应<)和&(对应&)是HTML实体编码,直接放到JS里会被当作无效字符,导致脚本报错无法运行。我已经把这些实体替换成了实际的JS语法字符。 - 浏览器安全拦截:很多现代浏览器会自动移除通过剪贴板粘贴的
javascript:前缀(出于防恶意脚本的安全限制),这就导致你的代码被当作普通搜索关键词,而不是可执行的JS代码。直接用SendInput输入代码可以避开这个问题。
额外注意事项
- 确保执行快捷键
Ctrl+Q时,浏览器窗口处于活动状态,否则脚本会把内容发送到当前激活的其他窗口。 - 如果Chrome等浏览器仍然拦截,你可以尝试在地址栏手动输入一次
javascript:开头的代码,浏览器会弹出安全提示,选择允许后,后续脚本输入就会正常执行。
内容的提问来源于stack exchange,提问作者NuclearApe
相关产品推荐
相关产品推荐

