当前位置: 首页 > 知识库问答 >
问题:

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

魏浩广
2023-03-14

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

当查看FireFox扩展的旧版本的旧代码时,似乎可以选择某些网站的跨域内容,如下所示。虽然对于新的FireFox WebExent,这不是留档中列出的功能。

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

这是我的清单。json文件。

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

这是我的main。js文件。

// 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);
}

正如您在主菜单中看到的那样。js文件,当尝试打印父iframe的源代码时,将抛出一个错误,如下所示。

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

我想知道如何允许FireFox WebExtension访问和修改跨域iframe的内容。我不确定这是不是因为没有在清单中写下正确的权限,或者我必须使用WebExtensionAPI或其他什么,我就是找不到任何关于这方面的信息。

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


共有1个答案

虞博涛
2023-03-14

直接访问跨域内容是不可能的,或者至少应该是不可能的。虽然有一种方法可以绕过这个限制(我没有仔细研究),但这不是故意的,会被认为是一个bug。

与其他类型的Firefox扩展不同,WebExtensions被授予访问内容的权限,最多只能逐个域。这与您指定的无关

如果要访问该跨域内容,必须在iframe或顶层窗口中插入脚本,以便访问。如前所述,注入此类脚本/CSS的能力是由权限控制的一项功能。然后,您可以使用消息传递(从顶部帧/子帧中的内容脚本到顶部帧/子帧中的内容脚本,或通过后台脚本中继)在跨域帧中注入的脚本之间进行通信。

假设您已经将脚本注入

 类似资料:
  • 问题内容: 我有一个用于跨域网站的iframe。我想读取iframe的DOM,我相信这是可能的,因为使用检查器,我什至可以修改iframe的DOM。但是,无论尝试哪种方式,我都会遇到相同的原始策略。我想要的只是从iframe加载到本地DOM中的内容。我以为它就像一样简单,但是返回的是空字符串。 我真的希望有一种方法可以这样做,因为我最近几天一直在做的工作是基于这种可行的方法。 谢谢 问题答案: 你

  • 问题内容: 我想将iframe中的内容的背景颜色设为黑色和将文本颜色设为白色,这是因为其默认设置为普通的白色背景和黑色文本。iframe src属性指向我无法访问或无法在该域中放置任何文件或样式表的其他域。因此,考虑到这些条件,是否有可能仅在iframe内容中进行这些样式更改? 问题答案: 唯一的可能性是通过您的代理加载iframe内容并修改HTML内容。您无法通过JavaScript从其他域访问

  • 本文向大家介绍如何在JavaScript中获取iframe的内容?,包括了如何在JavaScript中获取iframe的内容?的使用技巧和注意事项,需要的朋友参考一下 要获取body的内容,可以获取 src 属性或尝试以下代码片段-

  • 问题内容: 我看到了一些使用Ajax进行跨域的示例,但是它不起作用。 我尝试使用chrome并给出以下错误: 问题答案: 您无法使用,因为它会进行ajax调用,该调用将是跨源的,因此被Same Origin Policy 阻止,并且您尝试访问的Twitter API不支持跨源资源共享(或者如果它支持,允许,它不允许原点或,这是我尝试过的)。 该API确实支持JSONP(这不是真正的Ajax调用),

  • 问题内容: 可以说,我有一个名为example.com的网站,在该网站上嵌入了iframe.net域的iframe,现在我想读取iframe的内容并传递一些参数以显示文本消息。像Hi和用户名一样。 现在的问题是,这无法在两者之间建立连接,甚至无法获得我使用以下方法使用的iframe的innerHTML 它将引发错误“权限被拒绝访问属性” 有谁知道如何在跨域平台中读写 问题答案: 如果您无法控制框架