Мне сложно понять, как получить доступ к странице, загруженной в iframe, с внешней страницы. Обе страницы являются локальными файлами, и я использую Chrome.
У меня есть внешняя страница и много внутренних страниц. На внешней странице всегда должен отображаться заголовок внутренней страницы (это имеет смысл в моем приложении, возможно, в меньшей степени в этом урезанном примере). Это работает без проблем в AppJS, но меня попросили заставить это приложение работать прямо в браузере. Я получаю сообщение об ошибке «Блокировал фрейм с источником« null »для доступа к кадру с источником« null ». Протоколы, домены и порты должны совпадать.».
Я думаю, это связано с той же политикой происхождения Chrome в отношении локальных файлов, но это не помогло мне решить проблему напрямую. Я могу обойти проблему в этом упрощенном примере, используя метод window.postMessage для Способы обойти политику одинакового происхождения. Однако, выходя за рамки этого примера, я также хочу управлять DOM внутренней страницы с внешней страницы, так как это сделает мой код намного чище - так что публикация сообщений не совсем сработает.
Внешняя страница
<!DOCTYPE html>
<html>
<head>
<meta name="viewport">
</head>
<body>
This text is in the outer page
<iframe src="html/Home.html" seamless id="PageContent_Iframe"></iframe>
<script src="./js/LoadNewPage.js"></script>
</body>
</html>
Внутренняя страница
<!DOCTYPE html>
<html>
<head>
<title id="Page_Title">Home</title>
<meta name="viewport">
</head>
<body>
This text is in the inner page
</body>
</html>
JavaScript
var iFrameWindow = document.getElementById("PageContent_Iframe").contentWindow;
var pageTitleElement = iFrameWindow.$("#Page_Title");
Согласно Вероятно, что будущее выпуски Chrome поддерживают contentWindow / contentDocument, когда iFrame загружает локальный html-файл из локального html-файла?, я попытался запустить Chrome с флагом
--allow-file-access-from-files
Но в результатах не было изменений.
Согласно Отключить ту же политику происхождения в Chrome, я попытался запустить Chrome с флагом
--disable-web-security
Но опять же никаких изменений в результатах.
Согласно Что делает document.domain = document.domain?, я на обеих страницах была запущена команда
document.domain = document.domain;
Это привело к ошибке «Заблокировал фрейм с источником« null »от доступа к фрейму с источником« null ». Для кадра, запрашивающего доступ, для« document.domain »было установлено значение« », но для кадра, к которому осуществлялся доступ, этого не удалось. Оба должен установить для "document.domain" то же значение, чтобы разрешить доступ. "
Ради интереса я заставил обе страницы запустить команду
document.domain = "foo.com";
Это привело к ошибке «Неперехваченная ошибка: SecurityError: DOM Exception 18».
Я барахтаюсь. Любая помощь более знающих людей была бы фантастической! Спасибо!