Replace the "click here to copy" flash on Discuz
< Feedback on replace copy flash on Discuz
前几天还能正常使用脚本,不会弹出flash的复制框,点一下就复制。
感谢反馈。
我使用 Firefox 73.0.1 进行了测试,也遇到了问题,表现为点击“复制代码”按钮时没有任何提示。我尝试说明一下我的情况,不知道对你是否有帮助。
对“复制代码”按钮右键审查元素,可以看到点击时执行的 JavaScript 代码。它先检查了window.__cfRLUnblockHandlers
的值,如果为真才会执行copycode
函数。这个copycode
函数就是 Discuz 执行“复制代码”功能的函数,位于 /data/cache/common.js 中。这个脚本就是通过替换copycode
和setCopy
函数来实现的。
搜索window.__cfRLUnblockHandlers
,可以知道这个网站使用了 Cloudflare 的 Rocket Loader 来延迟加载 JavaScript。在开发者工具的调试标签页下可以看到 common.js 确实没有被加载。查看控制台标签页,发现是 Rocket Loader 的 js 加载失败了,打印出了这样的日志(用“”隐去了部分信息)
`Loading failed for the
另外吐槽一下,官网 www.discuz.net 自己都在用旧的 Discuz! X3.3 :/ ……
感谢如此详细的解答!
1、无论是common.js还是 rocket-loader.min.js我是能访问的,并且已在缓存中,但是启用本脚本后,依旧无效,仍是论坛默认的复制。
2、恕我愚钝,因我对javascript一窍不通,不知将此两句代码加至何处?不知此图是否正确?如下图所示,即便添加在前或在后,本脚本仍依旧无效。点击复制代码,依旧是论坛默认的复制功能。不知脚本是否有对discuz一劳永逸的解决方案呢?谢谢!
我特地加粗强调是模仿着加了,是说分别仿照各处那两句加……不过既然 rocket-loader.min.js 和 common.js 都成功加载了,那就不是 Rocket Loader 加载失败的这种情况。
稳妥起见可以先确认一下脚本有没有被执行,如果有,控制台里会输出一行finished replacing Discuz's copy flash
。
测试了一下,原来 Violentmonkey 跟 Tampermonkey 表现有点不同。前者执行脚本的时间比较早,在 common.js 加载前,于是等到 common.js 加载的时候就会把setCopy
和copycode
覆盖回去。下面这一段只改了有效的那一个分支,会等setCopy
被定义了再去修改,替换原来的 61-71行(if (greasemonkey4OrGreater) {
到}
)应该就可以了。不太擅长 JavaScript,写得有点烂。
function work() {
if (greasemonkey4OrGreater) {
// uses Firefox-specific hack
// https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Content_scripts
exportFunction(copyAndHint, window, {defineAs:'copyAndHint'});
window.eval(
'window.setCopy = function(text, hint) { copyAndHint(text); };' +
'window.copycode = function(code_div) { copyAndHint(code_div.textContent); };');
} else {
if (unsafeWindow.setCopy === undefined) {
setTimeout(work, 100);
return;
}
unsafeWindow.setCopy = setCopy;
unsafeWindow.copycode = copycode;
}
};
work();
如果有空可以给 Firefox 提个 bug,为什么第一次document.execCommand(‘cut’/‘copy’)
会被拒绝,能修好的话所有更新了 Discuz 代码的地方都能点一次解决了,其他使用了类似代码的地方也能受惠。其实我觉得点两次能复制还能接受。
一劳永逸当然是不可能的,Discuz 在更新,站长也会自己改(比如这次),适配大量网站成本会很高。要么忍,要么干;要么自己干,要么让别人干。
感谢解答! 因为我不是开发者,对firefox的BUG也不知道该怎么从头到尾描述,而且如果有其他开发者发现这个问题,想必应该早已提过吧,有可能是firefox故意而为之。
某一论坛失效
在前几天你这个脚本还能用得好好的,但不知道为什么,突然就不行了。 这个是儿童不宜的网站,而且需要挂科学上网。
链接是 sehuatang.net,随便进高清中文字幕的一个帖子,都会有个磁链可以测试。
这个网站的问题也是非常奇怪,不用脚本的时候,点击复制代码,偶尔会弹出flash的复制界面,偶尔会直接成功复制。所以我一般在这个论坛复制磁链的时候,都会点击两次鼠标。
但近日不知为何,针对这个网站脚本不生效了,但是对卡饭论坛还是能生效的呀。不知能不能修复呢!谢谢!
环境:WIN10 X64,FF72.0.1,暴力猴v2.12.7。