Firefox WebExtension - 如何获取和修改跨域iframe的内容

2024-07-03

我想知道如何在 Firefox WebExtension 中访问和修改 JavaScript 中的跨域 iframe 的内容。我了解普通 JavaScript 的局限性,并且修改跨域 iframe 将是一个 XSS 漏洞,但我相信有一些方法可以在我找不到的 WebExtension 中做到这一点。我相信这一点是因为旧版扩展清单具有允许在权限部分中允许跨域内容的选项。

当查看旧版 FireFox 扩展的旧代码时,某些网站似乎有以下方式的跨域内容选项。尽管对于新的 FireFox WebExtension,这并不是文档中列出的功能。

"cross-domain-content": ["https://www.example.com"]

这是我的manifest.json file.

{
  "manifest_version": 2,
  "name": "Test Extension",
  "version": "1.0",
  "content_scripts": [
    {
      "matches": ["*://*/*"],
      "all_frames": true,
      "js": [
        "js/main.js"
      ]
    }
  ],
  "permissions": [
    "*://*/*",
    "<all_urls>",
  ]
}

这是我的main.js file.

// Code is being run within an iframe ("all_frames": true)
if (window != window.top) {
  // Attempt to log the source of the parent iframe
  // If cross domain, met throws - Error: Permission denied to access property "frameElement"
  console.log(window.parent.frameElement.src);
}

正如你在main.js文件,当尝试打印父 iframe 的源时,会抛出如下错误。

错误:访问属性“frameElement”的权限被拒绝

我想知道如何允许 FireFox WebExtension 访问和修改跨域 iframe 的内容。我不确定这是否是未在清单中放置正确权限的问题,或者我必须使用 WebExtension API 或其他东西,我只是找不到任何相关信息。

此外,如果有人可以参考或提供一些以这种方式修改 iframe 内容的示例,我将不胜感激。


无法直接访问跨域内容

直接访问跨域内容是不可能的,或者至少不应该是可能的。虽然可能有办法绕过这个限制(我没有详尽地查看),但这不是故意的,并且会被视为一个错误。

与其他类型的 Firefox 扩展不同,WebExtension 最多被授予逐个域访问内容的权限。这与您指定无关"<all_urls>", or "*://*/*"在你的清单.json permissions https://developer.mozilla.org/en-US/Add-ons/WebExtensions/manifest.json/permissions。指定多个域权限不会打开对跨域内容的访问。开放对跨域内容的访问将是一个更复杂的问题,这可能会存在一系列与安全相关的错误。因此,在您的中指定多个域permissions只允许您将脚本/CSS 注入多个匹配的 URL,而无需对跨域内容进行特殊访问。因此,不应该有一种方法可以直接访问跨域 iframe 中的内容或从跨域 iframe 中直接访问内容。

必须使用注入该框架的脚本来访问跨域内容

如果您想要访问该跨域内容,则必须在您想要访问的 iframe 或顶级窗口中注入脚本。如前所述,注入此类脚本/CSS 的能力是由permissions。然后,您可以使用消息传递(从/到顶部框架/子框架中的内容脚本,或通过后台脚本中继)在跨域框架中注入的脚本之间进行通信。

鉴于您已经将脚本注入<all_urls>, and all_frames,您只需要实现上述它们之间通信的方法之一。然后,您需要从其他脚本请求所需的信息,或将信息传递给其他脚本进行处理。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Firefox WebExtension - 如何获取和修改跨域iframe的内容 的相关文章

  • 将 HTML 表导出到 Excel JavaScript 函数添加选择文件名

    我有以下将 HTML 导出到 Excel 的函数 function generateexcel tableid var table document getElementById tableid var html table outerHT
  • 为 Flutter Web 应用程序添加 id 或 name 属性或其他标识方式?

    在编写 Flutter Web 应用程序时 我尝试利用基于 Selenium 的 Web UI Testing 框架 遗憾的是 我无法通过 id 或 name 属性识别代表某个 flutter 小部件的 HTML 元素 HTML 文档中不存
  • Cckeditor 字符限制与 charcount 插件

    我怎么能够prevent用户输入新字符在最大字符之后已达到限制 Ckeditor charcount 插件只是向我显示剩余的字符 我希望它停在 0 处 但它会减去整数 这是我的 html 代码
  • Angular ui - 选项卡控制器执行多次

    当我单击一个选项卡时 相应的控制器会执行 4 次 为什么 E g DetailsPersonController s init函数执行了4次 仅应在加载选项卡视图后执行 HTML 标签
  • jQuery 循环淡入淡出两个图像!

    我无法弄清楚如何让简单的淡入淡出循环发挥作用 正如你所见 我对 jQuery 还很陌生 我已经尝试过 但现在需要很长时间才能解决 所以我想我应该寻求一些帮助 我想做的事 我有两个图像 id 为 img1 和 img2 我希望图像 1 淡入
  • 如何为cordova应用程序创建一个单独的目录并在其中存储数据?

    我想为我的 cordova 项目创建一个特定的目录 我不知道该怎么办 我提到了这样的链接 如何将文件移动到应用程序目录cordova https stackoverflow com questions 27765007 how to mov
  • 我应该担心 JavaScript 支持吗?

    我开发了一个支持ajax 的网站 然而 该网站目前无法在没有 JavaScript 的情况下运行 该网站在我测试过的任何浏览器以及 iPhone 诺基亚手机上都运行良好 但是 我还应该担心 javascript 支持吗 我知道有一些技术可以
  • Firefox 和 Chrome 中的字体看起来不同

    我正在使用 Google Web Font 的 PT sans font family PT Sans Arial serif 但在 Chrome 和 Firefox 中看起来有所不同 我需要添加什么才能使其在所有浏览器中看起来都相同吗 对
  • Node-Webkit在不同窗口启动功能

    我的 node webkit 应用程序由一个控制窗口和一个演示窗口组成 控制窗口收集数据并最终通过window open功能 演示文稿窗口现在可以访问global多变的 现在我想通过创建 SVG 元素等来呈现该信息的图形表示 我已经有一个
  • 使用来自外部 JS 文件的 Google Analytics 异步代码

    我正在尝试将 Google Analytics 跟踪代码的异步版本添加到网站 我想将 JavaScript 保存在一个单独的文件中 并从那里调用它 这是我的 js 文件中当前的内容 function addLoadEvent func va
  • 在 firefox-extension 的新选项卡中打开链接

    我开发了一个网络应用程序来将其用作 Firefox 扩展 在 Firefox 中 我将它包含在 iframe 中 如下所示 现在我想在我的应用程序中有一些传出链接 如果我只使用普通的链接标记 例如 a href http mywebapp
  • 如何在新窗口中获取dom元素?

    JavaScript 中的一个简单任务是打开一个新窗口并在其中写入 但我需要在一个dom元素中写入一个带有ID的div var novoForm window open somform html wFormx width 800 heigh
  • for循环中的appendChild只添加1个孩子

    在 JavaScript 中 我使用 HTML 表格创建一个网格 您在 Photoshop 中看到的网格类型 网格大小是可变的 即可以由用户更改 因此必须计算每个网格方块的大小并将其除以可用像素数以获得精确大小的网格 我已经完成了所有这些
  • 为什么需要@babel-core

    我是 Babel 和 JS 的新手 我想知道何时以及为何使用 babel core 包而不是 babel cli From 巴贝尔官方文档 https babeljs io docs en Babel是一个工具链 主要用于转换ECMAScr
  • 删除CKEditor图像插件中的htmlPreview

    我在 CKEditor 的图像插件中隐藏预览元素时遇到问题 我需要一个非常简单的图像对话框 其中只有图像源的输入字段和带有图像上传按钮的表单 因此 我使用这些自定义配置设置删除了不必要的元素 CKEDITOR on dialogDefini
  • 当更改来自另一个函数时,onchange 事件不会触发

    我有一个输入文本 它从 Javascript 函数 带有倒计时的计时器 获取他的值 我想在输入文本为 0 时引发一个事件 所以我使用更改事件监听器 不幸的是 当更改来自 javascript 函数时 它似乎不会引发该事件 即使更改来自 Ja
  • 如何检测安装的Chrome版本?

    我正在开发一个 Chrome 扩展程序 我想知道是否有一种方法可以检测用户正在使用哪个版本的 Chrome 获取 Chrome 的主要版本作为整数 function getChromeVersion var raw navigator us
  • sails-mongo 适配器,标准化错误消息

    我正在使用 sails mongo 适配器尝试 sailsJs 和 mongodb 将验证添加到模型后 当验证失败时 我会收到以下响应 Users js 模型 module exports schema true attributes na
  • jQuery keydown 和 :not 带输入

    我正在使用一个小脚本 当按下箭头键时 该脚本会触发页面上的下一个 上一个链接 我试图防止用户在我的搜索输入表单中输入时发生这种情况 也许他们的查询拼写错误并希望使用箭头键来修复 这是我正在处理的内容 var j jQuery noConfl
  • 街景中标记上的 InfoWindows

    根据 Google 文档 当您在地图上创建标记时 市场也会 复制 到地图的街景版本上 但是 onClick 事件绑定不会被复制 或者至少看起来不会被复制 因此我无法在 StreetView 中打开标记上的 InfoWindow 理想情况下

随机推荐