Ну, часто обсуждаемая вещь.Но я не могу заставить это работать.Что нужно сделать:
- Контент или фоновый сценарий должен взаимодействовать с iframe и наоборот.
- iframe у меня под рукой, поэтому есть все возможное.
Я много пробовал.Это не работает вообще.Например: если я разверну скрипт контента на каждой странице с allFrames = true via (manifest).Хорошо, имеет смысл.Iframe создается позже, поэтому триггер не будет вызван.Итак, давайте сделаем это: создадим iframe и затем отправим запрос executeScript:
chrome.tabs.executeScript(tabinst.tab_id, { allFrames: true, file:'frame.js'}, function() {
console.log("done");
});
Но это тоже не сработает.У кого-нибудь есть решение для связи с iframe XDM и расширением chrome?
PS: Как бы хорошо, если расширение chrome позволило бы postMessage для iframe
EDIT1:
Код не вставляется в iframe.Сценарий:
В файле "file.js" есть простая функция foo.Теперь я применяю его с указанным выше оператором через 2 секунды после создания и показа iframeЭта функция foo недоступна в iframe ... но есть в скрипте содержимого.Ошибка ReferenceError вызывается при попытке выполнить foo в iframe (по щелчку).
Так что это не время.И не имеет значения, применяю ли я Сценарии с помощью manifest и all_frames true.Если это сработает, будет доступен контент_скрипт.Но это не так.
EDIT2: @ serg
Да, спасибо, это работает!Я только что прошел через это.Моя проблема заключалась в том, что я предполагал, что когда вызывается обратный вызов chrome.tabs.executeScript, запрошенный сценарий завершается, и завершается манипуляция с DOM.Но на самом деле это не так.Требуется некоторое время, чтобы скрипт в iframe и содержащий слушатель был готов.
Поэтому мне пришлось отправить chrome.extension.sendRequest из этого скрипта в iframe, а затем запустить некоторый код из фонового слушателяманипулировать iframe.Спасибо за вашу помощь.
PS: Это также возможно сделать без "all_frames": true.Это займет некоторое время, пока динамический iframe не будет готов.С таймаутом это работает.В большинстве случаев это бесполезно, но, возможно, у кого-то сначала будет другое взаимодействие с пользователем.
PPS: Я до сих пор не понимаю, почему это возможно, и невозможно отправить события postMessage.Но, может быть, когда-нибудь это сработает.