使用Safari扩展在页面加载之前替换请求URL

时间:2016-07-10 23:39:52

标签: javascript replace safari webkit safari-extension

我正在编写一个供个人使用的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网络浏览器中有效,那么奖励积分可用,因为我经常使用这些浏览器。

1 个答案:

答案 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属性。