Я работаю над расширением Chrome, которое, среди прочего, поддерживает страницу с несколькими динамически создаваемыми фреймами iframe, указывающими на несколько разных доменов. Мне нужно загрузить сценарий содержимого в каждый из этих окон iframe, в идеале, не загружая его на каждую страницу.
На всех этих страницах iframe работает отдельный сценарий содержимого, который может определять, что он находится в соответствующем iframe, и я бы хотел, чтобы он загружал этот другой сценарий содержимого. После некоторых споров, он может получить frameId этого iframe, но chrome.tabs.executeScript () принимает только tabId, а не frameId, поэтому скрипт загружается на странице верхнего уровня, а не в желаемом iframe.
Обратите внимание, что сценарий, который я хочу внедрить, должен запускаться как сценарий содержимого с доступом к доступным API-интерфейсам Chrome.
Можно ли сделать это? Как?
Обновление: Ах, вы, конечно же, правы, wOxxOm, что «frameId может быть указан во втором параметре executeScript». Еще раз спасибо, ответьте, и я его приму. Мне, видимо, нужно читать повнимательнее. Я - давний программист, но новичок в расширениях Chrome, мне есть что усвоить.
Вторичный вопрос: похоже, мне нужно добавить <all_urls>
или http://*/*
и https://*/*
, разрешение на манифест, чтобы это было разрешено. Основной content_script, который делает это, имеет аналогичные шаблоны соответствия, и я мог бы добавить туда и этот вторичный скрипт, но на самом деле он нужен только для страниц, показанных в этих iframe, поэтому мне это кажется лучше. Есть ли у этого способа другие недостатки или есть какой-то лучший подход, кроме xhr / eval?
eval
в своем сценарии содержимого: сначала xhr / fetch скрипт дополнительного содержимого, затем оцените его. - person wOxxOm   schedule 31.03.2018