Chrome扩展程序,在浏览器显示之前替换响应代码中的HTML

时间:2011-06-07 09:04:11

标签: html google-chrome replace google-chrome-extension inject

我想知道是否有办法做这样的事情: 如果我在特定的网站上,我希望从我的计算机直接加载一些javascript文件(f.e.file:/// c:/test.js),而不是从服务器。

为此我想是否有可能进行扩展,这可能会改变浏览器在显示之前得到的响应中的HTML代码。所以整个过程应该是这样的:

  1. 请求
  2. 浏览器从服务器获取响应
  3. #response已更改# - 这是扩展程序进入时的部分
  4. 浏览器解析更改了响应并显示包含该新响应的页面。
  5. 无论如何它甚至不必是Chrome扩展程序。它应该只是完成上述工作。它可以阻止原始文件并提供另一个(DNS /代理?)或过滤我的计算机中的整个HTTP流量,并将特定代码替换为另一个匹配的响应。

2 个答案:

答案 0 :(得分:4)

您可以使用WebRequest API来实现这一目标。例如,您可以添加onBeforeRequest侦听器并重定向某些请求:

chrome.webRequest.onBeforeRequest.addListener(function(details)
{
  var responseData = "<div>Some text</div>"
  return {redirectUrl: "data:text/html," + encodeURIComponent(responseData)};
}, {urls: ["https://www.google.com/"]}, ["blocking"]);

这将显示<div>元素,文字为“some text”而不是Google主页。请注意,您只能重定向到允许Web服务器重定向到的URL。这意味着无法重定向到file:///网址,并且您只能重定向到您的扩展程序中的文件web accessibledata:http:网址可​​以正常使用。

答案 1 :(得分:1)

在Windows中,您可以使用Proxomitron(proxomitron.info),它是一个本地代理,可以拦截正在加载到浏览器中的任何页面或文件,并使用正则表达式(无DOM解析)更改它,无论您想要什么,在它之前由浏览器呈现。