Доступ к DOM текущей вкладки из динамически внедренного Iframe из расширения и обновление iframe DOM
Я разрабатываю расширение, которое добавляет пользовательскую панель инструментов вверху каждой страницы. Для этого я добавляю toolbar.html из расширения. Поскольку я новичок, я не уверен, как получить доступ к элементам DOM текущей вкладки и как обновить недавно добавленный iframe данными из DOM текущей вкладки.
Вот манифест:
{
"manifest_version": 2,
"name": "My Extension",
"description": "Extension to show custom toolbar",
"version": "1.0",
"browser_action": {
"default_icon": "icon.png",
"default_popup": "popup.html"
},
"background":{
"scripts":["background.js"]
},
"content_scripts":[{
"matches":["https://bitbucket.mycompany.com/*"],
"css":["styles.css"],
"js":["jquery.js","myscript.js"],
"all_frames":true
}],
"web_accessible_resources":[
"toolbar.html",
"styles.css"
]
}
Содержимое скрипта - myscript.js
var url=chrome.extension.getURL('toolbar.html');
var height='35px';
var iframe="<iframe src='"+url+"' id='myCustomBar' style='height:"+height+"'></iframe>"
$('html').append(iframe);
$('body').css({
'transform':'translateY('+height+')'
});
Мои вопросы:
- Если я использую отдельный сценарий содержимого (здесь ответили: доступ к содержимому iframe из сценария расширения chrome) для iframe, каким должен быть URL-адрес?
- Существуют ли другие способы доступа к DOM текущей вкладки из динамически внедренного iframe?
- Предположим, мне нужно это расширение для запуска на всех URL, которые имеют шаблон URL, например
https://bitbucket.*.com
какие должны быть спички?
1 ответ
Вы не можете использовать отдельный скрипт контента для этого iframe, так как src для iframe начинается с
chrome-extensions://
который по умолчанию не позволяет вводить скрипты содержимого.Вы могли бы включить тег сценария для
toolbar.html
затем используйтеWindow.postMessage
сделать передачу сообщений междуtoolbar.js
и сценарии родительского содержимого.Согласно шаблонам соответствия, если
'*'
находится в хосте, это должен быть первый символ. Таким образом, вы можете использовать что-то вродеhttps://*.com
и проверьте другие части в вашем коде.