2012-02-26 96 views
1

我有一个内容,基本上做一个console.log来表明它已被注入到一个页面,我的manifest.json已将all_frames设置为true。因此,如果我转到http://www.reddit.com/r/videos,我会看到每帧的消息,如果我点击某个视频,我还会看到一条消息来自注入视频iframe的脚本。这表明如果页面被动态修改为包含iframe,则contentcript将被注入到该页面中。铬扩展没有注入Javascript到iframe

当我转到http://www.html5video.org时,我只从一帧获取消息,但是如果我查看DOM,则会看到存在视频的iframe,因此我期望将它的内容注入到它中,但它不是。

我的最终目标是为页面上的视频获取选择器,并且我希望能够通过向代码中注入代码来注入代码。

帮助表示赞赏。

回答

4

我怀疑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

+0

唯一IFRAME存在于点击之前的书签交易例子是用于广告。点击“播放视频”按钮时,会动态创建每个媒体元素的IFRAME;我没有看到区别。 我不认为添加eventlistener是可行的,因为我需要访问IFRAME中的内容,我认为我只能通过将contentcript注入其中。 (我相信我已经看到了一个关于crbug的bug报告,指出你不能在内容的父页中看到IFRAMES的内容。) – 2012-02-27 09:00:11

+0

另外,我的内容打开了一个到后台页面的端口连接,所以我有能力通过弹出菜单上的命令重新运行我的内容。只是做一个JQuery搜索

+0

对不起,正在度假。您的代码为我工作,这让我相信我应该能够将您的代码转换为我的应用程序的通用解决方案。也将调查为什么我以前写的代码不起作用,但你的代码。 – 2012-04-06 22:55:29