从Chrome扩展程序替换网站的整个HTML文档

和沃克

我正在使用一个Chrome扩展程序来阻止网站,但未使用Chrome内置的阻止方法。进行自定义的原因是,我需要为每个被阻止的网站显示一个自定义阻止页面-相同的模板,并提供有关为何阻止该特定网站的详细信息。

在我的content.js文件中,我将一个“此站点被阻止”页面的完整HTML模板存储在一个称为var的变量中template(因为我不知道从Extension中的文件中加载它,所以我每天都是Python编码人员... )。清单包含大量URL,因此,如果加载了content.js脚本,则应阻止此站点(或检查该站点是否在本地允许用户使用“无论如何都允许”)。如果应该阻止某个站点,那么我要做的唯一事情就是:

var template = `<html>...full web page template removed...</html>`;

chrome.runtime.sendMessage({method: "getSite", site: window.location.host.toString()}, (response) => {
  console.log(response.data);

  document.body.innerHTML = renderTemplate(template, response.data);
});

renderTemplate函数仅采用HTML并进行一些查找+替换为response.data-这是有关URL的数据,该数据是从后台脚本中获取的,后台脚本只是带有大量词典的.js文件。

问题在于它显然仅替换了<body>,而网站CSS会影响阻止页面。是否可以替换整个页面内容?试图取代document.body全部抛出The provided value is not of type 'HTMLElement'.

我仍然在学习JS +扩展开发,任何建议都值得赞赏。

罗斯·雅各布斯

使用document.write

您遇到的问题是您要更换身体,而不是头部(或任何位于身体外部的<script>)。

要替换所有html,您要使用document.write。根据您要覆盖的方式,您可能需要调用document.open和document.close

替换所有html的示例如下所示:

newHTML = `<html>
  <head>
    <title>A Simple HTML Document</title>
  </head>
  <body>
    <p>This is a very simple HTML document</p>
    <p>It only has two paragraphs</p>
  </body>
</html>`

document.open()
document.write(newHTML)
document.close()

验证

使用Chrome开发者工具(应该是选项>更多工具>开发者工具),我们可以导航到控制台并获取内容

-> document.documentElement.outerHTML
<- html 
   <html><head>
   <title>
   A Simple HTML Document
   </title>
   </head>
   <body>
   <p>This is a very simple HTML document</p>
   <p>It only has two paragraphs</p>

   </body></html>"

这个jsfiddle示例显示了它的外观,并替换了CSS背景。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将按钮注入网站(Chrome扩展程序内容脚本)

Chrome扩展程序:获取当前网站名称

我可以从Chrome扩展程序访问网站的localStorage吗?

更改带有Chrome扩展程序的网站图标?

Chrome扩展程序的内容脚本不影响特定网站

当句子javascript / Google Chrome扩展程序中出现某些单词时,替换整个字符串

使用AWS Amplify通过网站登录到Chrome扩展程序

Chrome扩展程序可阻止特定网站上的网址

可以使用fetch替换整个文档或html元素吗?

用Chrome扩展程序替换Google徽标

在网站Chrome扩展程序中捕获URL更改

使用Chrome扩展程序淡出整个页面

从Chrome扩展程序访问网站数据

为特定网站的访问者禁用Chrome扩展程序?

Chrome扩展程序可打开Powerpoint /文档。这是如何运作的?

Chrome扩展程序可替换<input>类型

从网站将信息传递到chrome扩展程序

使用chrome扩展程序,我将如何阅读页面中的所有HTML并替换特定部分?

Chrome扩展程序提取错误的元数据而没有重新加载整个页面(原始HTML和浏览器的解释之间存在差异)

修改来自特定父网站的外部网站的iframe-Chrome扩展程序

从网站调用Chrome扩展程序中的函数

如何从Chrome扩展程序中的网站获取完整的HTML源代码

Chrome扩展程序的内容脚本未注入特定网站

网站是否可以跟踪用户的Chrome扩展程序或其行为?

HTML无法识别JavaScript(Chrome扩展程序)

Chrome扩展程序:检测Google文档中的按键

Chrome 扩展 - 在 JavaScript 渲染之前获取真正的原始 HTML 文档

如何让 chrome 扩展加载网站而不是 window.html

Chrome 扩展 | 通过通配符替换网站 JavaScript 文件