如何以编程方式将内容脚本添加到iframe文档

问题描述:

我正在编写一些诊断工具并试图为其创建Chrome扩展。我拥有的是带有iframe的页面。 iframe包含位于diffrent domain上的网站。如何以编程方式将内容脚本添加到iframe文档

我需要的是这两个网站之间的沟通。我想到的是,我可以简单地将content script添加到每个文档(iframe文档和我的顶部窗口文档),并通过background script和消息流在它们之间设置通信。

问题是,我不知道iframe中文档的地址是什么,用户可以将多个不同页面放入iframe。正因为如此,我不能使用manifest.json文件添加content script,因为我不知道要将matches属性放入什么内容。

我试图使用chrome.tabs.executeScript方法,并将allFrames标志设置为true。当iframe文档与顶层窗口文档位于相同的域时,它工作得很好,但是当它位于不同的域时,它不会将content script添加到框架文档。

的问题很奇怪,因为如果我知道在设计时的iframe网址,然后我可以添加这些脚本就像从清单文件......

如何添加内容脚本对等文件的iframe情况?

我还会告诉您,我有权访问我的manifest.json文件中的每个页面。它像这样流行:"permissions": ["tabs", "http://*/", "https://*/"]。额外的障碍是我无法在iframe文档内容中插入,它是第三方代码。

任何想法?谢谢你的帮助。

+0

您是如何验证内容脚本未执行x域的? AFAIK,'executeScript' +'allFrames:true'在顶部窗口中执行一个内容脚本,并在其下面显示所有框架。你试图解决的实际问题是什么? – 2012-08-11 13:28:00

+0

我把这个脚本放在'alert(window.location.href)'中,并且只获得顶部窗口的url。 – 2012-08-11 13:29:06

+0

并且您在页面完全加载后运行代码*如果你打开背景页面,并使用'chrome.tabs.query({active:true});'获取tabID,然后'chrome.tabs.executeScript(,{code:'alert(location.href); '})',你会得到多少警报? – 2012-08-11 13:33:13

正在关注Rob W评论问题是时间。我试图在加载之前将脚本插入到iframe中。我在iframe上使用onload事件来确定应该调用executeScript方法的时刻。

现在一切正常。感谢Rob。