百度贴吧图片点击放大

直接在当前页面点击查看原图(包括签名档)。支持图片的多开、拖拽、垂直或水平滚动和缩放旋转

< Feedback op 百度贴吧图片点击放大

Vraag/Reactie

§
Geplaatst: 15-10-2022

第40行
/* className分别指向BDE_Image新图,j_user_sign签名档,d_content_img老图。只有鼠标左键点击以上图片且不是图册贴里的图片时才会放大图片。(可修改) */
if (!e.button && 'className:BDE_Image,j_user_sign,d_content_img'.includes(t.className,10) && t.parentNode.nodeName !== 'A') {

t.parentNode.nodeName !== 'A'
似乎在有些浏览器不能正常发挥作用,会造成无限请求
t.parentNode.nodeName
P
target.tagName
A

能正常工作的有
firefox 103.0.2 (64 位)
不能正常工作的有
Microsoft Edge
版本 105.0.1343.42 (正式版本) (64 位)
Google Chrome
版本 87.0.4280.66(正式版本) (64 位)

bug效果
无限请求报错
GET https://tieba.baidu.com/p/undefined net::ERR_NAME_NOT_RESOLVED

解决方法
补一个target.tagName !== 'A'

lliwhxMaker
§
Geplaatst: 15-10-2022
Bijgewerkt: 15-10-2022

感谢反馈BUG。

因为我用Chrome 106没这样的问题。

电脑问题没法使用firefox和Edge。

所以可以帮个忙,看看

在什么帖子多少楼的位置会出现这种情况?最好提供一下目标图片的F12审查元素给我看看。谢谢。

e.button是只有鼠标左键点击起作用;

'className:BDE_Image,j_user_sign,d_content_img'.includes(t.className,10)是帖子内相关样式的图片起作用,表情和广告都不是这个样式;

至于t.parentNode.nodeName !== 'A',主要是阻止在图册里起作用,图册里的图片父元素是个a链接,<a><img></a>

没道理会出现target.tagName !== 'A'的情况?因为target是目标最底层元素,应该是图片,而不太可能是一个a链接。正常的贴吧里的图片是这样<div><img></div>

目前贴吧的图册,原本自己的点击图片功能有大BUG,第二页开始无法在点击图片;所以未来的大更新我会取消掉他的那个改成我的这个“点击放大”功能(如果有这个大更新的话)。

lliwhxMaker
§
Geplaatst: 15-10-2022

有没有可能是跟你其他的脚本冲突了,单独开一个看看?

§
Geplaatst: 15-10-2022
Bijgewerkt: 15-10-2022

关掉了除了Tampermonkey® by Jan Biniok 外所有的插件
测试环境
Google Chrome
版本 87.0.4280.66(正式版本)(64 位)
Tampermonkey 4.18.0

Microsoft Edge
版本 106.0.1370.47 (正式版本) (64 位)
谷歌商店的Tampermonkey 4.18.0

均关闭了其它脚本
只要点击了楼中楼的翻页按钮就会触发bug
只能说目前这个脚本看浏览器,故障后的错误请求很高频,久了难说会不会出事

§
Geplaatst: 15-10-2022

firefox 103.0.2 (64 位)
Tampermonkey 4.18.0
不会报错

§
Geplaatst: 15-10-2022

图片

lliwhxMaker
§
Geplaatst: 15-10-2022
Bijgewerkt: 15-10-2022

非常感谢,我知道原因了。 在目前的这个版本里的确算是个重大BUG,非常感谢。

实际上是''.includes()的问题,他对空字符串‘’也会进行匹配,导致了图片的无限创建,然后无限报错。

我真的没想到会出现楼中楼触发的情况,楼中楼翻页后按钮的className就空了。

我自己使用的内侧版里是早早发现改掉了,使用了数组来匹配[].includes(),想着应该上线版不会触发就没理,直到忘记。

不过,这也让我知道,关于图片创建错误会导致无限循环创建的问题,i.onerror需要重新思考修改。啧啧啧

Reactie plaatsen

Log in om antwoord te geven.