У меня есть iframe, расположенный всего в одном каталоге:
<iframe id = "menu" src = "./menu/menu.htm" title = "Menü"></iframe>
Цель — поделиться одним и тем же меню на нескольких страницах. Этот iframe должен иметь возможность общаться со своим «родителем».
К сожалению, я столкнулся с ошибкой «перекрестного происхождения».
Это происходит, даже если все файлы являются локальными, а родительский элемент запускается из браузера как
file:///C:/Users/..../testiframe.htm
При указании источника iframe с тем же протоколом и полным путем file:///C:/Users/...
Я получаю ту же ошибку с жалобой на «нулевое происхождение».
Кстати: исключение происходит при запуске скрипта в iframe, например.
console.info(top.location);
и есть полный текст
«Ошибка: не удалось прочитать именованное свойство из «Местоположения»: заблокировано кадр с исходным значением «null» от доступа к кадру с перекрестным происхождением».
Да, по какой-то неизвестной причине браузер считает file:///
и localhost
междоменными. Решение состоит в том, чтобы запустить локальный http-сервер и использовать IP-адрес машины, если вы хотите, чтобы он выглядел локально, как и следовало ожидать.
В противном случае это API PostMessage, который позволяет вам общаться между доменами с iframe.
Да, спасибо. Даже
file:///
иfile:///
считаются междоменными. Приятно читать, что ты тоже этого не понимаешь. Тем временем я обнаружил, что другие обходные пути, найденные здесь, также применимы: (веб-сервер python localhost или chrome с опцией--allow-file-access-from-files
)