我怀疑Chrome浏览器会将您的内容脚本注入到原始页面源代码的IFRAME中,这是使用reddit.com示例的一部分 - IFRAME是原始页面的一部分,因此Chrome可以并将注入那些。对于html5video链接,IFRAME不是原始源代码的一部分。但是,如果您检查元素,您可以看到IFRAME,这表明IFRAME已被动态加载到DOM。我看到了与我写的扩展名相同的行为,所以它看起来一致。
如果需要注入IFRAME那么也许你可以挂钩的DOM创建活动,并采取所需的操作:
document.addEventListener('DOMNodeInserted', onNodeInserted, false);
UPDATE:
这个怎么样为http://html5video.org/ - 使用下面的content_script代码我可以得到IFRAME,然后是VIDEO标签。注意:对于Reddit,这种方法/概念也应该工作得很好。
content_script.js
console.log("content script for: " + document.title);
var timer;
document.addEventListener('DOMNodeInserted', onNodeInserted, false);
function onNodeInserted(e)
{
if(timer) clearTimeout(timer);
timer = setTimeout("doSomething()", 250);
}
function doSomething()
{
$media = $(".mwEmbedKalturaIframe");
console.log($media);
$video = $media.contents().find("video");
console.log($video);
}
的manifest.json
{
// Required
"name": "Foo Extension",
"version": "0.0.1",
// Recommended
"description": "A plain text description",
"icons": { "48": "foo.png" },
//"default_locale": "en",
// Pick one (or none)
"browser_action": {
"default_icon": "Foo.png", // optional
"default_title": "Foo Extension" // optional; shown in tooltip
},
"permissions": [ "http://*/", "https://*/", "tabs" ],
"content_scripts": [
{
"matches": ["http://*/*", "https://*/*"],
"js": ["jquery-1.7.1.min.js", "content_script.js" ],
"run_at": "document_idle",
"all_frames": true
}
]
}
参见:jQuery/JavaScript: accessing contents of an iframe
唯一IFRAME存在于点击之前的书签交易例子是用于广告。点击“播放视频”按钮时,会动态创建每个媒体元素的IFRAME;我没有看到区别。 我不认为添加eventlistener是可行的,因为我需要访问IFRAME中的内容,我认为我只能通过将contentcript注入其中。 (我相信我已经看到了一个关于crbug的bug报告,指出你不能在内容的父页中看到IFRAMES的内容。) – 2012-02-27 09:00:11
另外,我的内容打开了一个到后台页面的端口连接,所以我有能力通过弹出菜单上的命令重新运行我的内容。只是做一个JQuery搜索
对不起,正在度假。您的代码为我工作,这让我相信我应该能够将您的代码转换为我的应用程序的通用解决方案。也将调查为什么我以前写的代码不起作用,但你的代码。 – 2012-04-06 22:55:29