Quando provo questa:
window.location.href = "file:///C:/Users/Cerbrus/Documents/SomeFile.js"
(Sì, è un percorso valido.)
Chrome mi butta questo errore:
Not allowed to load local resource: file:///C:/Users//Documents/File.js
Questo è perché JavaScript non ha accesso a locale file (a causa del fatto che è in modalità sandbox) e stai impostando il nuovo URL con JavaScript.
"SandBoxed" indica che una tecnologia ha limitato (o non) l'accesso al di fuori di un certo insieme di limiti. Nel caso dei browser, ciò significa che il codice che viene eseguito sulla pagina non può accedere ai file sul tuo sistema (altrimenti sarebbe facile "rubare" i dati, semplicemente dando un'occhiata al file system dell'utente).
Tuttavia,
dire che ho 2 file:
C:/Test/Test.htm
C:/Test/Test1.htm
Test.htm
contiene un'unica questo:
<script>
window.location = "file:///C:/Test/Test1.htm";
</script>
Questo effettivamente reindirizzare a Test1.htm
, dal momento che il file di destinazione è nello stesso dominio da cui proviene il file sorgente.
(Sidenote: Non sono del tutto convinto che "[Same Same Policy] (https://developer.mozilla.org/en-US/docs/JavaScript/Same_origin_policy_for_JavaScript)" non abbia un ruolo qui, dato che noi anche cambiando il protocollo in 'file:'.) – Cerbrus
Risposta stupenda! Quindi lo script non funziona da una pagina Web ospitata ma funziona da un file htm locale. Ma che mi dici di Bookmarklets? Ho bisogno del mio script in un booklet. Non ha funzionato per me, ma Bookmarlkets sono locali, qual è la ragione per questo? E grazie anche alle altre persone che hanno risposto. – BearCode
Non sembra funzionare neanche, @BearBear: 'javascript: (function() {window.location =" file: /// C: /Test/Test1.htm ";}());' < - Questo dà lo stesso errore. Sto indovinando l'esempio di 'Test.htm' che ho citato, perché il file sorgente è già locale, quindi il' file:/ 'è incluso nella sandbox. –
Cerbrus