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