首页 > 解决方案 > 忽略 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>

标签: firefoxfirefox-addon-webextensions

解决方案


看起来它在 Chrome 中“正常工作”,因为 Chrome不支持“ALLOW FROM”。

Firefox 在这里做了正确的事情,但是您可以像使用webRequestAPI 一样截取此标头,特别是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权限。


推荐阅读