忽略Firefox WebExtension中的X-Frame-Options

时间:2018-08-14 18:47:08

标签: firefox firefox-webextensions

我正在尝试将扩展程序从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>

1 个答案:

答案 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']
);

您还需要具有webRequestwebRequestBlocking权限。