我可以在加载之前在 Chrome 扩展程序中创建一个 html 页面吗?

Posted

技术标签:

【中文标题】我可以在加载之前在 Chrome 扩展程序中创建一个 html 页面吗?【英文标题】:Can I create a html page in Chrome extension before it's loaded? 【发布时间】:2017-01-31 20:51:06 【问题描述】:

我需要拦截对特定服务器的第一个请求,让它成为http://google.com,而不是在当前选项卡的根目录中渲染它,而是创建一个包含两个iframes的页面,在第一个iframe将被渲染最初请求的站点http://google.com,在第二个中将呈现让我们说http://bing.com

我需要这样的东西:

<!DOCTYPE html>
<html>
<body>

<iframe src="http://www.google.com">
  <p>Your browser does not support iframes.</p>
</iframe>
<iframe src="http://www.bing.com">
  <p>Your browser does not support iframes.</p>
</iframe>

</body>
</html>

其实我知道如何拦截第一个请求:

chrome.webRequest.onBeforeRequest.addListener(
    function(details)
    
        console.log(details.requestBody);
    ,
    urls: ["*://google/*"],
    ['requestBody']
);

但是接下来要做什么呢?

【问题讨论】:

【参考方案1】:

Chrome 扩展 can't directly modify http response body,您可能需要使用一些变通方法,例如,将此请求重定向到预定义的 html 模板。

chrome.webRequest.onBeforeRequest.addListener(
    function(details)
    
        return  redirectUrl: chrome.runtime.getURL('template.html');
    ,
    urls: ["*://www.baidu.com/*"],
    ['blocking']
);

【讨论】:

这个页面应该托管在其他地方还是可以捆绑在扩展中? @Anatoly,取决于您的需要,我的示例是假设模板与扩展程序捆绑在一起。

以上是关于我可以在加载之前在 Chrome 扩展程序中创建一个 html 页面吗?的主要内容,如果未能解决你的问题,请参考以下文章

等待document.body存在

如何自动重新加载我正在开发的 Chrome 扩展程序?

如何在网站完成加载动态内容之前延迟fetch()

Chrome 扩展 - 在浏览器上加载 js 之前获取 Html DOM

Chrome 扩展内容脚本在页面刷新之前未加载

在Chrome扩展程序中,您可以强制在一切之前注入一些javascript吗?