У меня сложное время выяснить, как получить доступ к странице, загруженной в iframe с внешней страницы. Обе страницы - это локальные файлы, и я использую Chrome.Использование iframe с локальными файлами в Chrome
У меня есть внешняя страница и многие внутренние страницы. Внешняя страница должна всегда отображать заголовок страницы для внутренней страницы (это имеет смысл в моем приложении, возможно, в меньшей степени в этом урезанном примере). Это работает без проблем в AppJS, но мне было предложено сделать это приложение непосредственно в браузере. Я получаю сообщение об ошибке «Заблокирован кадр с источником« null »от доступа к кадру с нулевым значением« нуль ». Протоколы, домены и порты должны соответствовать.».
Я думаю, что это связано с той же политикой происхождения, что и для локальных файлов, но это не помогло мне устранить проблему напрямую. Я могу обойти проблему в этом урезанном примере, используя метод window.postMessage за Ways to circumvent the same-origin policy. Однако, выходя за рамки этого примера, я также хочу манипулировать DOM внутренней страницы с внешней страницы, так как это сделает мой код намного чище, поэтому публикация сообщений не будет выполнять эту работу.
Outer Page
<!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");
Per Is it likely that future releases of Chrome support contentWindow/contentDocument when iFrame loads a local html file from local html file?, я пытался запускать Chrome с флагом
--allow-file-access-from-files
Но результатов не было.
Per Disable same origin policy in Chrome, я пытался запускать Chrome с флагом
--disable-web-security
Но опять-таки не было никаких изменений в результатах.
Per What does document.domain = document.domain do?, я имел обе страницы запустить команду
document.domain = document.domain;
Это привело к ошибке "блокированной кадр с происхождением„нулевым“от доступа кадра с началом„нулем“. Рама запрашивает доступ установите «document.domain» на «», но доступ к кадру не сделал. Оба должны установить «document.domain» на то же значение, чтобы разрешить доступ. «
Для удовольствия у меня были обе страницы, выполняющие команду
document.domain = "foo.com";
Это привело к ошибке «Неиспользованная ошибка: SecurityError: исключение DOM 18».
Я барахтаюсь. Любая помощь от более знающих людей была бы фантастической! Благодаря!
Обратите внимание, что если у вас установлен Python, вы можете применить тот же подход, который вы предлагаете здесь, и [настроить веб-сервер в одной строке] (http://stackoverflow.com/a/532710/710446): 'python -m SimpleHTTPServer [ port] ' – apsillers
Вау, это действительно хорошо. Не видел этого. Я тестировал его на одном исходном коде, и он работает, но медленнее, чем экспресс. Быть быстрым и быстрым - это довольно удивительно и, конечно же, компромисс, который нужно учитывать. – Brian
С Python 3 используйте вместо этого: 'python -m http.server [port]' – taleinat