#javascript #iframe #google-chrome-extension #cross-domain
Вопрос:
Я использую расширение Chrome для вставки веб-страниц в виде фреймов внутри одной из внутренних страниц моего расширения.
Удаление заголовков перекрестного происхождения из iframes, так что они отображаются просто отлично.
И установка поля "all_frames": true
в манифесте расширения, которое позволяет вводить мой контент-скрипт на все страницы, а также на фреймы внутри них.
манифест.json :
"content_scripts": [
{
"matches": [
"<all_urls>"
],
"all_frames": true, //<------
"run_at": "document_idle",
"js": [
"js/content-script.js"
]
}
],
Проблема в том, что:
Это вводит мой контент-скрипт во ВСЕ фреймы внутри веб-страниц (на некоторых веб-сайтах уже есть фреймы, поэтому здесь мы получаем ситуацию с вложенными фреймами)..
Мне нужно обмениваться сообщениями только с iframe верхнего уровня. Меня не волнуют вложенные дочерние кадры внутри страницы.
Я попытался обнаружить родительское окно следующим образом:
content-script.js
if (window !== window.top) {
console.console('iframe');
} else {
console.console('NOT iframe');
}
Но это всегда iframe
так, потому что , ну, я вводю саму веб-страницу верхнего уровня в качестве iframe внутри моего расширения.
Мой вопрос таков:
Как я могу определить только iframe верхнего уровня?
Итак, если это так сейчас:
<iframe name="1">
<iframe name="2">
<iframe name="3"></iframe>
</iframe>
</iframe>
Как я могу определить, работает ли этот скрипт внутри iframe #2 ?
Комментарии:
1. Одна вещь, которую следует учитывать, — это предоставление вашему фрейму верхнего уровня a
name
. По умолчаниюwindow.name
это пустая строка, которую вы можете подтвердить в консоли на любой странице