Używanie iframe z lokalnymi plikami w Chrome
Mam trudny czas, aby dowiedzieć się, jak uzyskać dostęp do strony załadowanej w ramce iframe ze strony zewnętrznej. Obie strony są plikami lokalnymi i używam Chrome.
Mam stronę zewnętrzną i wiele stron wewnętrznych. Strona zewnętrzna powinna zawsze wyświetlać tytuł strony dla strony wewnętrznej (ma to sens w mojej aplikacji, być może mniej w tym okrojonym przykładzie). To działa bez problemu w AppJS, ale zostałem poproszony, aby ta aplikacja działała bezpośrednio w przeglądarce. Dostaję błąd ”Zablokowano ramkę o początku „null” w dostępie do ramki o początku „null”. Protokoły, domeny i porty muszą być zgodne.„
Myślę, że wynika to z tej samej zasady pochodzenia Chrome dotyczącej plików lokalnych, ale to nie pomogło mi rozwiązać problemu bezpośrednio. Mogę obejść ten problem w tym okrojonym przykładzie za pomocą metody window.postMessage naSposoby obchodzenia polityki dotyczącej tego samego pochodzenia. Jednak wykraczając poza ten przykład, chcę także manipulować DOMem wewnętrznej strony ze strony zewnętrznej, ponieważ spowoduje to, że mój kod stanie się znacznie czystszy - więc wysyłanie wiadomości nie wystarczy.
Strona zewnętrzna
<!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>
Strona wewnętrzna
<!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");
ZaCzy jest prawdopodobne, że przyszłe wersje Chrome obsługują contentWindow / contentDocument, gdy iFrame ładuje lokalny plik html z lokalnego pliku html?, Próbowałem uruchomić Chrome z flagą
--allow-file-access-from-files
Ale wyniki nie uległy zmianie.
ZaWyłącz tę samą zasadę pochodzenia w Chrome, Próbowałem uruchomić Chrome z flagą
--disable-web-security
Ale znowu nie było zmian w wynikach.
ZaCo robi dokument.domena = dokument.domena?, Kazałem obu stronom uruchomić polecenie
document.domain = document.domain;
Spowodowało to błąd ”Zablokowano ramkę o początku „null” w dostępie do ramki o początku „null”. Ramka żądająca dostępu ustawia „document.domain” na „”, ale dostęp do ramki nie. Oba muszą ustawić „document.domain” na taką samą wartość, aby umożliwić dostęp."
Dla zabawy kazałem obu stronom uruchomić polecenie
document.domain = "foo.com";
Spowodowało to błąd ”Uncaught Error: SecurityError: DOM Exception 18„
Trzęsę się. Jakakolwiek pomoc od bardziej kompetentnych ludzi byłaby fantastyczna! Dzięki!