Google chrome extension Chrome扩展:向特定iframe中加载的页面发送消息
我正在开发一个Chrome扩展来支持一个包含多个iFrame的页面,每个iFrame从其他域加载一个页面。我需要向加载了这些iFrame中特定一个的页面发送消息。顶级页面和iframe中的页面都有自己的内容脚本,因此可以使用完整的消息传递API 从顶部页面,当我执行chrome.runtime.sendMessage()时,所有iFrame都会得到它(顶部窗口也是如此,但它的内容脚本很容易知道特定的消息不是为它准备的)。是否有任何方法可以针对这些iframe中的一个特定的iframe,或者让所需的iframe页面知道msg是针对它的 请注意Google chrome extension Chrome扩展:向特定iframe中加载的页面发送消息,google-chrome-extension,messaging,Google Chrome Extension,Messaging,我正在开发一个Chrome扩展来支持一个包含多个iFrame的页面,每个iFrame从其他域加载一个页面。我需要向加载了这些iFrame中特定一个的页面发送消息。顶级页面和iframe中的页面都有自己的内容脚本,因此可以使用完整的消息传递API 从顶部页面,当我执行chrome.runtime.sendMessage()时,所有iFrame都会得到它(顶部窗口也是如此,但它的内容脚本很容易知道特定的消息不是为它准备的)。是否有任何方法可以针对这些iframe中的一个特定的iframe,或者让所需
- 顶部页面无法直接访问iframe页面中的任何内容,因为它们来自其他域
- 顶部页面知道最初在每个帧中加载的URL,但用户可能已经从那里导航,因此将目标URL作为msg参数包含在接收脚本中以进行检查是行不通的
更新:@wOxxOm的回答很有帮助,但我仍在思考如何获得所需的frameid 更具体地说,我需要对这些iframe做两件事,它们都需要frameId:
- 将脚本注入每个iframe
- 将MSG发送到特定iframe以响应顶级页面上的用户操作
这似乎太迂回了,我希望我错过了一些支持API或其他简单的方法。我确实找到了一个解决方案,但它非常间接。我希望这是清楚的;据我所知,所有这些活动部件都是野兽的本性 下面是我最后做的:
这在这里起作用,但请务必让我知道是否有更简单的方法来实现这一点。请参阅chrome的文档。**tabs**。sendMessage:第三个参数可能是具有frameId的对象。要枚举所有帧,可以使用chrome.webNavigation.getAllFrames谢谢@wOxxOm,好消息。不知何故,我错过了API的整个webNavigation部分,看起来它可以完成这项工作,而且对我的项目的其他部分也很有帮助。如果你把你的评论作为回答,我会把它标记为答案。说得太快了。getAllFrames()方法看起来确实非常有用,但结果不是DOM顺序,也不是我所知道的任何顺序。如果是这样的话,顶层页面如何知道其中的哪个项对应于它要针对的DOM中的特定iframe?