javascript - 将当前加载的 HTML 代码发送 (POST) 到本地托管的服务器
问题描述
我在本地机器上运行了一个端点,我想将我在浏览器中打开的任何网页的 html src 发布到它。我写了一个 chrome 扩展,但是内容安全策略不允许我使用fetch
api。
有没有办法专门绕过特定扩展的 CSP。我可以在从我的扩展加载页面之前修改 CSP,但这可能存在安全风险,如果我要将其分发给其他人,或者每天使用。
一种解决方法可能是访问存储在本机机器上的历史记录,然后直接从我的端点获取每个访问过的 URL。
解决方案
如果您在端点上使用 Node.js,这只是一个想法。
用于puppeteer
通过DevTools 协议连接到浏览器并监视事件:'targetcreated'
用于新选项卡的创建和事件:'load'
用于打开的选项卡导航。然后你就可以上page.content()
每个导航了。
像这样的东西:
- 启动浏览器:
chrome.exe --remote-debugging-port=9222
- 使用此代码连接:
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
.
推荐阅读
- python - 获取列表之间的唯一产品并保持输入顺序
- java - 在 Mac 上使用 Windows Native L&F (Java/Swing)
- c++ - 一个最小的跨平台代码来打印这个对吗?
- typo3 - 如何在扩展中使用 TYPO3 Link 向导
- netsuite - 在套件表单上插入列表/记录字段
- jenkins-job-builder - 如何在工作级别覆盖 jenkins_job_builder 中的环境变量?
- gstreamer - Gstreamer 多播 RTP:音频中出现意外的不连续性
- java - Java 编译器如何为具有多个边界的参数化类型选择运行时类型?
- c# - 无法从 emgucv 中的视频中检测到人脸
- vba - VBA 查找和读取多个范围