zhang-wangz / LeetCodeRating

一款对应力扣的浏览器油猴插件| TamperMonkey | Chrome
Other
848 stars 27 forks source link

Bug report #44

Closed CLOUDERHEM closed 7 months ago

CLOUDERHEM commented 11 months ago
  1. 这个load函数应该没有执行, urlchang没有dispatch https://github.com/zhang-wangz/LeetCodeRating/blob/aa5e260b6e0bed0fd593791a314da16ba960c25b/leetcodeRating_greasyfork.user.js#L318
  2. 这种判断最好放在外部, 如果没有开启这个, 就不应该调用getTagData https://github.com/zhang-wangz/LeetCodeRating/blob/aa5e260b6e0bed0fd593791a314da16ba960c25b/leetcodeRating_greasyfork.user.js#L872
  3. 这个querySelector返回值是null, 这个条件成立是因为== , 建议规范下 https://github.com/zhang-wangz/LeetCodeRating/blob/aa5e260b6e0bed0fd593791a314da16ba960c25b/leetcodeRating_greasyfork.user.js#L1344
  4. 这个逻辑应该是有问题的, t1在有些页面切换的时候, 执行中的handler(func)并不会把t1赋值为unknown (当页面 .text-lg存在, 但colorSpan不存在), 导致t1 == id 一直成立, 但是dom已经改变, 需要重新修改(复现场景: 打开一个题解, 然后直接返回题目描述, 难度标签不会被刷新成难度分) https://github.com/zhang-wangz/LeetCodeRating/blob/aa5e260b6e0bed0fd593791a314da16ba960c25b/leetcodeRating_greasyfork.user.js#L1503
  5. 这样注册interval应该是有问题的, timeout太小, 导致handler执行频率太高了, 而且handler完成目标功能的时候就应该自我清除了, 而不是仅靠urlchange的时候清除handler(好况且好像urlchange也没触发过), 等urlchange的时候重新执行setInterval, 开启新的handler https://github.com/zhang-wangz/LeetCodeRating/blob/aa5e260b6e0bed0fd593791a314da16ba960c25b/leetcodeRating_greasyfork.user.js#L1632
  6. 因为 1. 没有执行, 这个事件也没有触发过 https://github.com/zhang-wangz/LeetCodeRating/blob/aa5e260b6e0bed0fd593791a314da16ba960c25b/leetcodeRating_greasyfork.user.js#L1636
  7. 你没有清除match时候原始的handler, 如果疯狂点题目描述页, urlchange事件会多次触发, 导致match时会执行多次的setInterval, 这样会同时执行很多个一样的handler, 而且这样操作页面切换的时候没办法把所有的interval清除, GM_setValue的时候interval id就被覆盖了 https://github.com/zhang-wangz/LeetCodeRating/blob/aa5e260b6e0bed0fd593791a314da16ba960c25b/leetcodeRating_greasyfork.user.js#L1625
  8. 纸片人好像也不太需要(doge)
zhang-wangz commented 11 months ago

如果觉得有问题可以直接提pr修改,保证功能正常就行,本身不是专门写前端的,确实写的有些地方不是很规范,只是保持了功能可用。可读性性一般

zhang-wangz commented 7 months ago

算了,我还是回复一下你

zhang-wangz commented 7 months ago
  1. 这个load函数应该没有执行, urlchang没有dispatch https://github.com/zhang-wangz/LeetCodeRating/blob/aa5e260b6e0bed0fd593791a314da16ba960c25b/leetcodeRating_greasyfork.user.js#L318
  2. 这种判断最好放在外部, 如果没有开启这个, 就不应该调用getTagData https://github.com/zhang-wangz/LeetCodeRating/blob/aa5e260b6e0bed0fd593791a314da16ba960c25b/leetcodeRating_greasyfork.user.js#L872
  3. 这个querySelector返回值是null, 这个条件成立是因为== , 建议规范下 https://github.com/zhang-wangz/LeetCodeRating/blob/aa5e260b6e0bed0fd593791a314da16ba960c25b/leetcodeRating_greasyfork.user.js#L1344
  4. 这个逻辑应该是有问题的, t1在有些页面切换的时候, 执行中的handler(func)并不会把t1赋值为unknown (当页面 .text-lg存在, 但colorSpan不存在), 导致t1 == id 一直成立, 但是dom已经改变, 需要重新修改(复现场景: 打开一个题解, 然后直接返回题目描述, 难度标签不会被刷新成难度分) https://github.com/zhang-wangz/LeetCodeRating/blob/aa5e260b6e0bed0fd593791a314da16ba960c25b/leetcodeRating_greasyfork.user.js#L1503
  5. 这样注册interval应该是有问题的, timeout太小, 导致handler执行频率太高了, 而且handler完成目标功能的时候就应该自我清除了, 而不是仅靠urlchange的时候清除handler(好况且好像urlchange也没触发过), 等urlchange的时候重新执行setInterval, 开启新的handler https://github.com/zhang-wangz/LeetCodeRating/blob/aa5e260b6e0bed0fd593791a314da16ba960c25b/leetcodeRating_greasyfork.user.js#L1632
  6. 因为 1. 没有执行, 这个事件也没有触发过 https://github.com/zhang-wangz/LeetCodeRating/blob/aa5e260b6e0bed0fd593791a314da16ba960c25b/leetcodeRating_greasyfork.user.js#L1636
  7. 你没有清除match时候原始的handler, 如果疯狂点题目描述页, urlchange事件会多次触发, 导致match时会执行多次的setInterval, 这样会同时执行很多个一样的handler, 而且这样操作页面切换的时候没办法把所有的interval清除, GM_setValue的时候interval id就被覆盖了 https://github.com/zhang-wangz/LeetCodeRating/blob/aa5e260b6e0bed0fd593791a314da16ba960c25b/leetcodeRating_greasyfork.user.js#L1625
  8. 纸片人好像也不太需要(doge)
  1. load是内部函数,已经return出去了,所以在外部执行init就是执行了load
  2. 如果你仔细看了就会发现,在我的结构里,放外面和里面是一样的
  3. 这里本来就是因为搜索不到所以使用的==,单纯为了省事,如果你仔细看了,就能发现所有里面都用的undifined,没用null
  4. 当时是有这个bug,但是后来改掉了
  5. 因为lc的标签频繁变换,但是不会重新渲染所有元素,所以使用的intelval,实际上,如果你了解油猴,你也能发现大部分这类脚本都通过intelval重新高速触发,方法内判断返回,当然,这也有另一种写法,通过MutationObserver进行监听,但是因为变化频繁,所以和第一种其实效率差的并不大。
  6. 因为1你就没懂,所以说不触发
  7. 题目页面转换标签,会触发urlchange,实际上,如果你能够实际操作下打印,也能发现intelval的id被清除
  8. 其实我挺讨厌这种光说不pr,甚至没实验过的,当初只是懒得回,现在有空还是回一下,以上
CLOUDERHEM commented 7 months ago

image

那就很奇怪了, 我这里是没有执行这个load, 还是执行了没有输出? 是我理解不对嘛? o(╥﹏╥)o

zhang-wangz commented 7 months ago

image

那就很奇怪了, 我这里是没有执行这个load, 还是执行了没有输出? 是我理解不对嘛? o(╥﹏╥)o

靠。。这个确实是我的问题,主要这个功能没啥用,它本质是通过历史url传进传出进行的,但是油猴脚本url改变的时候会重新加载,所以对于插件来说这个功能没啥用,我已经打算删除这个方法了。。

zhang-wangz commented 7 months ago

image

那就很奇怪了, 我这里是没有执行这个load, 还是执行了没有输出? 是我理解不对嘛? o(╥﹏╥)o ╥﹏╥