Mam trudny czas dowiedzieć się, jak uzyskać dostęp do strony załadowanej w elemencie iframe ze strony zewnętrznej. Obie strony to pliki lokalne i używam Chrome.Używanie elementu iframe z lokalnymi plikami w przeglądarce Chrome
Mam zewnętrzną stronę i wiele wewnętrznych stron. 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 przykładowym przykładzie). Działa to bezproblemowo w AppJS, ale poproszono mnie, aby ta aplikacja działała bezpośrednio w przeglądarce. Występuje błąd "Zablokowano ramkę z początkiem" null "dostępu do ramki z początkiem" null ".Pliki, domeny i porty muszą się zgadzać".
Sądzę, że jest to spowodowane zasadami Chrome dotyczącymi pochodzenia dla plików lokalnych, ale to nie pomogło mi bezpośrednio rozwiązać problemu. Mogę obejść problem w tym uproszczonym przykładzie za pomocą metody window.postMessage na Ways to circumvent the same-origin policy. Jednak wychodząc poza ten przykład, chcę również manipulować DOMem strony wewnętrznej z zewnętrznej strony, ponieważ dzięki temu mój kod stanie się znacznie czyściejszy, więc wysyłanie wiadomości nie będzie w pełni wykonywać zadania.
zewnętrzna strona
<!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");
Per Is it likely that future releases of Chrome support contentWindow/contentDocument when iFrame loads a local html file from local html file? starałem uruchomienie Chrome z flagą
--allow-file-access-from-files
Ale nie było zmian w wynikach.
Per Disable same origin policy in Chrome, próbowałem uruchomieniu Chrome z flagą
--disable-web-security
Ale znowu nie było zmiany w wynikach.
Per What does document.domain = document.domain do?, miałem obie strony uruchomić polecenie
document.domain = document.domain;
Spowodowało to błąd "zablokowanych ramkę z pochodzenia«null»dostępu ramkę z pochodzenia«null». The dostępu ramki żądania ustaw "document.domain" na "", ale ramka, do której uzyskiwany był dostęp, nie ma.Zarówno musi ustawić "document.domain" na tę samą wartość, aby umożliwić dostęp. "
Dla zabawy, miałem obie strony uruchomić polecenie
document.domain = "foo.com";
Powoduje to błąd "Uncaught Error: SecurityError: DOM Exception 18".
Jaję się. Każda pomoc od bardziej doświadczonych ludzi byłaby fantastyczna! Dzięki!
Zauważ, że jeśli masz zainstalowany Python, możesz zastosować to samo podejście, które sugerujesz tutaj, i [skonfigurować jeden serwer sieciowy] (http://stackoverflow.com/a/532710/710446): 'python -m SimpleHTTPServer [ port] ' – apsillers
Wow, to naprawdę miłe. Nie widziałem tego. Przetestowałem go na tym samym kodzie źródłowym i działa, ale wolniej niż ekspresowo. Uruchomienie tego tak szybko jest niesamowite i na pewno trzeba wziąć pod uwagę kompromis. – Brian
W Pythonie 3 użyj tego: 'python -m http.server [port]' – taleinat