Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

【bug】代理的fetch函数没有判定 __INITIAL_STATE__是否存在导致其他插件执行错误 #100

Closed
qwq0 opened this issue Dec 5, 2024 · 3 comments
Labels
bug Something isn't working Compatibility 兼容性 和网站页面或其他插件的兼容性问题

Comments

@qwq0
Copy link

qwq0 commented Dec 5, 2024

突然发现写的听视频插件用不了了 找了一圈之后发现原来是fetch被代理了(
是这个插件: https://greasyfork.org/zh-CN/scripts/496668-b%E7%AB%99%E5%90%AC%E8%A7%86%E9%A2%91
(ps: 由于是自用插件没有在主页标明使用方法 方法是在收藏夹的播放页点击左上角的按钮)

复现步骤:
安装使用上述插件

问题分析:
因为这个插件使用了一个自定义页面 也就是使用了一个404页面并用插件生成出来了一个页面
所以这个页面中并不存在 window.__INITIAL_STATE__
不过BilibiliSponsorBlock代理的fetch中未判断的直接访问了window.__INITIAL_STATE__
这导致了整个fetch方法被直接中断

解决方案:
下面三项中任意一项

  1. 在代理的fetch中访问window.__INITIAL_STATE__时先进行判定
  2. 先判定window.__INITIAL_STATE__是否存在 再决定是否代理fetch
  3. 套try 在出现任何意外的问题时回退到直接调用原本的fetch

这个问题似乎是BilibiliSponsorBlock更新0.5.4中出现的 在之前的版本中没有发现这个问题
很抱歉我没有时间完整阅读本仓库中的全部源码 所以这里只贴一下从devtools看到的出错位置
图片

@hanydd hanydd added bug Something isn't working Compatibility 兼容性 和网站页面或其他插件的兼容性问题 labels Dec 5, 2024
@hanydd
Copy link
Owner

hanydd commented Dec 5, 2024

之前代理fetch的方法可能有点暴力,会修改的

@hanydd
Copy link
Owner

hanydd commented Dec 5, 2024

fixed by c183287

@hanydd hanydd closed this as completed Dec 5, 2024
@github-project-automation github-project-automation bot moved this from 开发中 to 已完成 in Bilibili Sponsor Block Dec 5, 2024
@qwq0
Copy link
Author

qwq0 commented Dec 5, 2024

@hanydd 感谢

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working Compatibility 兼容性 和网站页面或其他插件的兼容性问题
Projects
Status: 已完成
Development

No branches or pull requests

2 participants