在我的 Chrome 扩展程序中,我将内容脚本注入到IFRAMEs
页面内的所有内容中。这是manifest.json
文件的一部分:
"content_scripts": [
{
"run_at": "document_end",
"all_frames" : true,
"match_about_blank": true,
"matches": ["http://*/*", "https://*/*"],
"js": ["content.js"]
}
],
因此,具有多个的单个网页IFRAMEs
最终将运行我注入的content.js
.
内部的逻辑content.js
从IFRAME
它注入的每个页面或从主/首页收集数据,并将其发送回后台脚本(使用chrome.runtime.sendMessage
)。后台脚本反过来需要将数据存储在全局变量中,稍后使用在扩展本身。
我面临的问题是应用程序需要区分从多个接收到的“数据” IFRAMEs
,因为我的数据收集方法可以在用户与页面交互时重复调用,因此我不能简单地“转储”接收到的数据将后台脚本转换为数组。相反,我需要使用dictionary
-type 数据存储。
我可以IFRAME
通过运行以下命令来判断数据是来自首页还是来自首页:
//From the `content.js`
var isIframe = window != window.top;
我的想法是,如果我收集每个页面的 URL,IFRAME
那么我应该能够将其用作唯一键,将数据存储在我的字典类型全局变量中:
//Again from content.js
var strUniqueIFrameURL = document.URL;
好吧,那是行不通的,因为两个或多个IFRAMEs
可以具有相同的 URL。
所以我最初的问题是——如何IFRAMEs
在页面上区分?是否有一些唯一的 ID 或 Chrome 分配给他们的东西?