我正在尝试将扩展程序从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>
答案 0 :(得分:1)
由于Chrome doesn't support“允许”,因此它似乎在Chrome中“可以使用”。
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
权限。