firefox - 忽略 firefox webextension 中的 X-Frame-Options
问题描述
我正在尝试将我的扩展程序从 Chrome 移植到 Firefox,但是 X-Frame-Options 有问题。我的扩展非常简单,它所做的只是创建几个 iframe,等待它们加载,然后从加载的页面中提取一些数据。
这一切在 Chrome 上都很好用,但是在 Firefox 中,我遇到了页面没有加载到 iframe 中的问题(可能是由于X-Frame-Options: ALLOW-FROM XXX
)。
在 Chrome 中有
"permissions": {
"https://example.com/"
}
足以让浏览器忽略 X-Frame-Options,但在 Firefox 中它仍然不起作用。
那么,如何强制 Firefox 忽略我的扩展(及其页面)的这个 X-Frame-Options?
编辑:我只想补充一点,因为无论如何我都在使用注入的内容脚本(从框架中获取数据),我不需要它在 iframe 中。我所需要的只是在用户不可见的情况下呈现页面(因此新标签等是不可行的:/)。
EDIT2:这2个文件扩展名适用于chrome,但不适用于firefox:
manifest.json
{
"manifest_version": 2,
"name": "Iframe test",
"description": "foobar",
"version": "0.9.3",
"browser_action": {
"default_popup": "popup.html"
},
"permissions": [
"activeTab",
"https://jisho.org/"
]
}
popup.html
<html>
<head>
<meta charset="UTF-8" />
</head>
<body>
<iframe src="https://jisho.org"></iframe>
</body>
</html>
解决方案
看起来它在 Chrome 中“正常工作”,因为 Chrome不支持“ALLOW FROM”。
Firefox 在这里做了正确的事情,但是您可以像使用webRequest
API 一样截取此标头,特别是webRequest.onHeadersReceived
. 像这样(未经测试)的东西应该可以工作:
browser.webRequest.onHeadersReceived.addListener((details) => {
let newHeaders = details.responseHeaders.filter(
header => !header.name.toLowerCase().endsWith('frame-options')
);
return {responseHeaders: newHeaders};
},
{
urls: [ 'https://jisho.org/*' ],
types: [ 'sub_frame' ]
},
['blocking', 'responseHeaders']
);
您还需要webRequest
和webRequestBlocking
权限。
推荐阅读
- google-cloud-platform - GCE 托管实例组 - 出站服务器请求的静态 IP 地址
- jasper-reports - JasperReport 不显示表格
- http - 您可以在 k8s nginx 入口中为每个规则设置后端协议吗?
- c# - 赋予 C# 类模块化功能
- dependency-injection - 每个模块都有一个用于 DI 的 XML 配置文件是否有意义?
- java - How to use SQLite UNIQUEIDENTIFIER type fields in Java
- javascript - 使用 this.$router.go(-1); 后如何重新加载 localStorage VueJS;
- python - 迭代和修改目录中的文件
- angular - 为什么 mat-tables matRowDef 包含 2 个变量?
- c# - 获取字典列表中类型的属性