首页 > 解决方案 > 将当前加载的 HTML 代码发送 (POST) 到本地托管的服务器

问题描述

我在本地机器上运行了一个端点,我想将我在浏览器中打开的任何网页的 html src 发布到它。我写了一个 chrome 扩展,但是内容安全策略不允许我使用fetchapi。

有没有办法专门绕过特定扩展的 CSP。我可以在从我的扩展加载页面之前修改 CSP,但这可能存在安全风险,如果我要将其分发给其他人,或者每天使用。

一种解决方法可能是访问存储在本机机器上的历史记录,然后直接从我的端点获取每个访问过的 URL。

标签: javascriptbrowser-extension

解决方案


如果您在端点上使用 Node.js,这只是一个想法。

用于puppeteer通过DevTools 协议连接到浏览器并监视事件:'targetcreated'用于新选项卡的创建和事件:'load'用于打开的选项卡导航。然后你就可以上page.content()每个导航了。

像这样的东西:

  1. 启动浏览器:
chrome.exe --remote-debugging-port=9222
  1. 使用此代码连接:
import puppeteer from 'puppeteer';

const browser = await puppeteer.connect({
  browserURL: 'http://localhost:9222',
  defaultViewport: null,
});

try {
  browser.on('targetcreated', async (target) => {
    if (target.type() === 'page') {
      const page = await target.page();
      page.on('load', () => { getData(page); });
    }
  });

  const currentPages = await browser.pages();
  for (const page of currentPages) {
    page.on('load', () => { getData(page); });
  }

  async function getData(page) {
    console.log(await page.title());
  }

} catch (err) { console.error(err); }

目前,'load'对于没有网站图标的站点,该事件会被触发两次,但这可以通过使用简单的 URL 过滤器来消除,例如,在Set.


推荐阅读