替换Chrome标签页内容,而无需连接到服务器

时间:2019-03-28 22:49:43

标签: google-chrome-extension

我正在编写Chrome扩展程序,并且需要某些选项卡:

  1. 防止标签页连接到其网址
  2. 在标签中显示自定义文字
  3. (更新)标签的URL最好保持不变

请提出一个方向,以实现两个目标。

我尝试过的方法...我可以防止加载原始内容:

chrome.webRequest.onBeforeRequest.addListener(...
  return {cancel: true};

然后显示一个技术页面:

  

对服务器的请求已被扩展程序阻止。   尝试禁用您的扩展程序。   ERR_BLOCKED_BY_CLIENT

(也许可以有一个自定义的技术页面?)

但这也阻止了我的内容脚本的加载,因此我失去了更改标签的DOM的能力。

没有onBeforeRequest,我可以通过内容脚本在选项卡中显示自定义文本,但Chrome仍会请求原始URL。

1 个答案:

答案 0 :(得分:1)

不是通过返回{cancel: true}来取消请求,而是通过返回{redirectUrl: "..."}将请求重定向到包含您的自定义内容的URL。

最简单的方法是在扩展程序中以a web-accessible resource的形式包含“请求阻止” HTML文档。您可以使用查询字符串参数将参数传递给文档-在获取可访问网络的资源时,它们将被忽略,但是可以使用window.location.search从内容脚本中进行访问。

使用这种方法的扩展的一个著名示例是uBlock Origin,它使用可访问Web的HTML页面document-blocked.html来替代被阻止的Web页面。