Sto attraversando un periodo difficile per capire come accedere a una pagina caricata in un iframe dalla pagina esterna. Entrambe le pagine sono file locali e sto utilizzando Chrome.Utilizzo di iframe con file locali in Chrome
Ho una pagina esterna e molte pagine interne. La pagina esterna dovrebbe sempre mostrare il titolo della pagina per la pagina interna (ha senso nella mia applicazione, forse meno in questo esempio ridotto). Funziona senza problemi in AppJS, ma mi è stato richiesto di far funzionare questa app direttamente nel browser. Viene visualizzato l'errore "Bloccato un frame con origine" null "dall'accesso a un frame con origine" null ".I protocolli, domini e porte devono corrispondere.".
Penso che questo sia dovuto allo stesso criterio di origine di Chrome relativo ai file locali, ma questo non mi ha aiutato a risolvere il problema direttamente. Posso aggirare il problema in questo esempio ridotto utilizzando il metodo window.postMessage per Ways to circumvent the same-origin policy. Tuttavia, andando oltre questo esempio, voglio anche manipolare il DOM della pagina interna dalla pagina esterna, poiché questo renderà il mio codice molto più pulito, quindi i messaggi di pubblicazione non faranno il lavoro.
esterno Pagina
<!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>
interno Pagina
<!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?, ho cercato di lanciare Chrome con la bandiera
--allow-file-access-from-files
Ma non ci sono stati cambiamenti nei risultati.
Per Disable same origin policy in Chrome, ho cercato di lanciare Chrome con la bandiera
--disable-web-security
Ma ancora una volta non c'era alcun cambiamento nei risultati.
Per What does document.domain = document.domain do?, ho avuto entrambe le pagine eseguire il comando
document.domain = document.domain;
Ciò ha determinato l'errore "bloccato un telaio con origine 'nullo' l'accesso a un telaio con origine 'nullo'. Il telaio richiede l'accesso impostare "document.domain" su "", ma non è stato necessario accedere al frame. Entrambi devono impostare "document.domain" sullo stesso valore per consentire l'accesso. "
Per divertimento, avevo entrambe le pagine eseguire il comando
document.domain = "foo.com";
Ciò ha provocato l'errore "Errore non rilevato: SecurityError: DOM Exception 18".
Sono in difficoltà. Qualsiasi aiuto da parte di persone più esperte sarebbe fantastico! Grazie!
Nota: se hai installato Python, puoi applicare lo stesso approccio che suggerisci qui e [configura un server Web una riga] (http://stackoverflow.com/a/532710/710446): 'python -m SimpleHTTPServer [ porta] ' – apsillers
Wow, è davvero bello. Non l'avevo visto. L'ho provato sullo stesso codice sorgente e funziona, ma più lento di espresso. Essere operativi in modo rapido è piuttosto sorprendente e sicuramente un compromesso da considerare. – Brian
Con Python 3, utilizzare invece: 'python -m http.server [porta]' – taleinat