2012-02-26 98 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