Вам не нужно вставлять скрипты в html-файлы внутри расширения. Из них вы сможете получить доступ к API Chrome. * Из скриптов страниц.
При этом, если iframe и фрейм с текстовым полем находятся в разных доменах, вы не можете получить доступ к одному из другого, так как безопасность межсайтовых сценариев предотвращает это.
Мне нужно увидеть больше HTML-файла, который у вас уже есть, но вы могли бы сделать что-то вроде этого ...
На вкладке расширения (которая содержит текстовое поле):
chrome.extension.onRequest.addListener(function (response) {
if (response.type === "urlUpdate") {
document.getElementById("addressBar").value = response.url;
}
});
На фоновой странице:
chrome.extension.onRequest.addListener(function(request, sender) {
if (request.type === "urlUpdate") {
chrome.tabs.sendRequest(sender.tab.id, {type: "urlUpdate", url: request.url});
}
});
Наконец, скрипт контента, который нужно запустить на http://*
и https://*
. Убедитесь, что у вас есть это в вашем манифесте (добавьте его в существующий список скриптов содержимого):
"content_scripts": [
{
"matches": ["http://*/*", "https://*/*"],
"js": ["address.js"],
"all_frames": true
}
];
важно , чтобы all_frames
был установлен на true
, чтобы скрипт запускался в iframe.
Тогда у вас будет это в address.js
:
if (window.top !== window) {
chrome.extension.sendRequest({type: "urlUpdate", url: location.href});
}
По сути, проверка window.top
должна избегать путаницы, только отправляя сообщение об обновлении URL-адреса изнутри фреймов. Вам может потребоваться дополнительная фильтрация, чтобы не запускать ее на других страницах, которые вам не нужны.
Это не проверено, но я вполне уверен, что такое решение подойдет.