2012-02-26 3 views
1

У меня есть текст, который по сути делает console.log, чтобы указать, что он был введен в страницу, а мой manifest.json имеет all_frames, установленный в true.Расширение Chrome не впрыскивает Javascript в iframe

В результате, если я перехожу к http://www.reddit.com/r/videos Я вижу сообщение за кадр, и если я нажму на видео, я также увижу сообщение, исходящее из сценария, введенного в iframe видео. Это указывает на то, что если страница динамически модифицируется для включения iframe, в нее будет введено содержимое.

Когда я перехожу к http://www.html5video.org, я получаю сообщение только от одного фрейма, но если я посмотрю на DOM, я вижу, что для видео есть iframe, поэтому я бы ожидал, что в него будет вложен мой текст. не является.

Моя конечная цель - получить селектор для видео на странице, и я ожидаю, что смогу это сделать, введя код, который ищет его в 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 присутствует в примере Reddit до щелчка для объявлений. IFRAME для каждого элемента мультимедиа создается динамически, когда вы нажимаете кнопку «воспроизведение видео»; Я не вижу разницы. Я не думаю, что добавление eventlistener будет работать, потому что мне нужно получить доступ к содержимому внутри IFRAME, которое, я думаю, могу сделать, только если внутри него будет введено содержимое. (Я считаю, что я видел отчет об ошибке в crbug, в котором говорится, что вы не можете видеть содержимое IFRAMES внутри страницы от родителя в текстовом файле.) –

+0

Кроме того, mycriptcript открывает соединение с портом на странице фона, поэтому я имеют возможность перезапускать мой текст с помощью команды во всплывающем меню. Просто поиск JQuery для

+0

Извините за задержку; был в отпуске. Ваш код работал для меня, что убеждает меня, что я должен иметь возможность конвертировать ваш код в общее решение для моего приложения. Также будет исследовать, почему код, который я написал ранее, не работал, но ваш код делает. –

Смежные вопросы