Greasy Fork is available in English.

动漫花园(dmhy.org) - 批量复制磁力链接

点选所有需要下载的种子然后一键复制。

< Feedback on 动漫花园(dmhy.org) - 批量复制磁力链接

Review: Good - script works

§
Posted: 2023-07-05

先检查 document.readyState 再用 DOMContentLoaded listener

当用户使用脚本很多时,有时候脚本启动器启动该脚本时 DOMContentLoaded 事件已经错过,导致主体功能并不会加载。可以修改部分为

addEventListener('DOMContentLoaded', function() { 
    ...
});
if (document.readyState !== 'loading') {
    main();
} else {
    document.addEventListener('DOMContentLoaded', function() {
        main();
    });
}

function main() {
    ...
}

参考: https://stackoverflow.com/questions/39993676/code-inside-domcontentloaded-event-not-working

Jixun.MoeAuthor
§
Posted: 2023-07-05

稍微改了下:

if (document.readyState === 'complete') {
    setTimeout(main, 0);
} else {
    addEventListener('DOMContentLoaded', main);
}

另外你说的情况应该算是脚本管理器的 bug。如果标记了 @run-at document-start 应当在 document.readyState === 'loading' 时或之前注入脚本。

我选择判断是否为 complete 状态,则是因为 readyStateinteractive 尚未触发 DOMContentLoaded 事件:

The document has finished loading and the document has been parsed but sub-resources such as scripts, images, stylesheets and frames are still loading. The state indicates that the DOMContentLoaded event is about to fire.

参考:

§
Posted: 2023-07-19
Edited: 2023-07-19

应该确实是应该,但是如果用户脚本太多的话,脚本管理器也无力保证能在 在 document.readyState === 'loading' 时能来得及全部注入吧。

我这边是用了个有几十万行的全局脚本(也有 @run-at document-start),从而导致此现象。
我测试了VM和GM都能重现。

Jixun.MoeAuthor
§
Posted: 2023-07-20

应该确实是应该,但是如果用户脚本太多的话,脚本管理器也无力保证能在 在 document.readyState === 'loading' 时能来得及全部注入吧。我这边是用了个有几十万行的全局脚本(也有 @run-at document-start),从而导致此现象。我测试了VM和GM都能重现。

那你这脚本得有多少…

Jixun.MoeAuthor
§
Posted: 2023-07-20

之前推送的 fix 对你有用吗

§
Posted: 2023-07-20

有用的,谢谢修复!

§
Posted: 2023-07-20

也没有很多,就是这一个实在太大了 233 https://github.com/qsniyg/maxurl/blob/master/userscript.user.js

Post reply

Sign in to post a reply.