我正在编写一个供个人使用的Safari扩展程序,用于修改某个网站的网址,以便可以正常查看极小的缩略图。 URL的格式如下:
https://static.example.com/data/thumb/eb68634f5a5e3959e03be2af7c0b88ab.png
但是,我想在加载之前从URL中删除thumb/
,使其加载原始的全尺寸图像,然后使用注入的样式表(已经正在工作)以不同的方式显示。 / p>
我理解beforeload
听众可能能够帮助我,但我无法找到足够的文档来说明如何在本网站上重写请求。
获取现有网址并进行更改已完成;我使用以下测试代码:
document.addEventListener("beforeload", handleBeforeLoadEvent, true);
function handleBeforeLoadEvent(event)
{
if(event.url.match(/https:\/\/static.example.com\/data\/thumb\/(.+)/g)) {
console.log(event.url.replace("thumb/", ""));
}
}
正如预期的那样输出此样式的URL:
https://static.example.com/data/eb68634f5a5e3959e03be2af7c0b88ab.png
但它仍然没有 event.url
为新值。我可以使用event.preventDefault()
取消请求,但我需要更改网址。
我希望有人可以帮我解决这个问题!理论上,如果它可能在Firefox和Google Chrome网络浏览器中有效,那么奖励积分可用,因为我经常使用这些浏览器。
答案 0 :(得分:1)
属性event.url
是只读的。但是这样的事情应该有效:
document.addEventListener('beforeload', function (evt) {
if (evt.target instanceof HTMLImageElement) {
if (/https?:\/\/static\.example\.com\/data\/thumb\//.test(evt.url)) {
evt.preventDefault();
evt.target.src = evt.target.src.replace('/thumb', '');
}
}
}, true);
也就是说,您使用了事件的target
属性,首先测试目标是否为图片,如果是,则更改图片src
属性。