本帖最后由 岚依 于 2020-5-18 10:18 编辑
我不知道是不是我打开的姿势不对,但有些帖子就是无法加载外链的图片,怎么说呢。。。看上去好像这是其他(储存了图片的)网站的防盗链措施,但是它们加载不出来还是挺影响阅读体验的
比如说这样:
(帖子链接 https://bbs.nyasama.com/forum.php?mod=viewthread&tid=78092&page=6#pid813485 )
图片永远加载不出来
图片永远加载不出来,在控制台里可以发现加载失败了,原因大概是B站服务器通过Referer发现了这边在盗链(
可以看见加载失败了
原因大概是B站服务器通过Referer发现了图片是从喵玉加载的(
帖子实际上应该是这样的:
所以,是不是可以考虑监听图片标签加载失败的事件,在加载失败后换别的referer / cors再试一遍,或者直接把图片标签的referer-policy设为no-referer,假如实在不行的话,直接上iframe 
PS: 我写了一个油猴脚本来暂时解决这个问题,也许能帮到有同样问题的人(
它应该能够监听所有“延迟加载”的图片,并在图片加载失败的时候自动重新尝试一遍
- // ==UserScript==
- // @name Referer rescuer
- // @namespace http://tampermonkey.net/
- // @version 0.1
- // @description try to take over the world!
- // @author lanyi
- // @match https://bbs.nyasama.com/*
- // @grant none
- // ==/UserScript==
- (function() {
- 'use strict';
- document.body.querySelectorAll(`img[lazyloadthumb="1"]`).forEach(element => {
- console.log(`adding error handler for ${element.id}`);
- element.onerror = async () => {
- console.log(`rescuing ${element.id}`);
- const response = await fetch(element.getAttribute('src'), {
- "headers": {
- "accept": "*/*",
- "sec-fetch-dest": "empty",
- "sec-fetch-mode": "cors",
- "sec-fetch-site": "cross-site"
- },
- "referrerPolicy": "no-referrer",
- "mode": "cors",
- });
- element.setAttribute('src', URL.createObjectURL(await response.blob()));
- };
- })
- })();
复制代码
PSS:为什么手机版(触屏版)直接就连<img>标签都消失了啊喂!
|