Access to XMLHttpRequest at 'file:..' has been blocked by CORS policy

di il
13 risposte

Access to XMLHttpRequest at 'file:..' has been blocked by CORS policy

Ciao,
cercavo di imparare a leggere un file in locale, per cui mi sono messo a studiare il seguente codice (che riporto integralmente) del libro, ma ho già un primo errore:


Il codice non è da me modificato, ma un semplice copia e incolla dal libro dell'autore, ok ?
Html:

<!doctype html>
<html lang="it">

<head>
    <meta charset="utf-8">
    <title>JSON 1</title>
    <meta name="description" content="JSON 1">
</head>

<body>
    <p id="output" />

    <script type="text/Javascript">
        'use strict';
        const file = 'persona.json';

        // Creo un oggetto XMLHttpRequest per fare la chiamata al servizio
        // vedi https://developer.mozilla.org/it/docs/Web/API/XMLHttpRequest
        const request = new XMLHttpRequest();

        //altrimenti si aspetta un XML
        request.overrideMimeType('application/json');

        // Definisco quale file (file) e come chiamarlo (comando GET)
        request.open('GET', file, true);

        // Definisco cosa fare quando il servizio mi risponde
        // la funzione onload sarà chiamata dopo l'arrivo della risposta
        // la funzione onload è una funzione callback
        request.onload = function () {
            //dato è un oggetto, perhè il file json contiene un solo oggetto
            const dato = JSON.parse(this.responseText);
            let HTML = `<div><h1>${dato.nome} ${dato.cognome}</h1></div>`;
            mostraRisultato(HTML);
        };

        // Definisco cosa fare quando la chiamata al servizio fallisce
        // è una funzione callback richiamata in caso di errore (passato come argomento)
        request.onerror = errore => mostraRisultato(`<pre>ERRORE: ${errore}</pre>`);

        // Chiama il servizio. Di fatto inizia la chiamata che procede come processo in background
        // la funzione send() termina SENZA attendere il completamento della chiamata che
        // avviene in modalità ASINCRONA
        request.send(null);

        // mostra il testo passato come argomento come inner HTML di un elememnto del DOM
        const mostraRisultato = testo => document.getElementById('output').innerHTML = testo;
    </script>

</body>

</html>
Il file persona.json:

{
  "nome": "Giovanni",
  "cognome": "Rossi",
  "sesso": "maschio",
  "vivente": true,
  "età": 27,
  "indirizzo": {
    "via": "Buonarroti 18",
    "comune": "Alpette",
    "provincia": "TO",
    "CAP": "10080"
  },
  "numeriTelefono": [
    {
      "tipo": "casa",
      "numero": "0000000"
    },
    {
      "tipo": "cellulare",
      "numero": "111111111"
    }
  ],
  "titoli": [
    "sig.",
    "dott."
  ]
}
Sembra che il problema derivi da CORS policy:
Access to XMLHttpRequest at 'file:///C:/Users/...../source/repos/Libri/EserciziJavascript/Esercizi/15_json/persona.json' from origin 'null' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, chrome-extension, edge, https, chrome-untrusted.

Come posso ovviare a tale problema ?

13 Risposte

  • Re: Access to XMLHttpRequest at 'file:..' has been blocked by CORS policy

    jockerfox ha scritto:


    Ciao,
    cercavo di imparare a leggere un file in locale, per cui mi sono messo a studiare il seguente codice (che riporto integralmente) del libro
    ...
    posta il link al libro
  • Re: Access to XMLHttpRequest at 'file:..' has been blocked by CORS policy

    Http://www.sos-office.it/libri/javascript.htm
    Capitolo 15.
  • Re: Access to XMLHttpRequest at 'file:..' has been blocked by CORS policy

    C'è un forum su quel sito.

    Chi può rispondere meglio di chi ha scritto il libro !
    Fossi in te chiederei lì
    .... e poi riporterei la risposta qui
  • Re: Access to XMLHttpRequest at 'file:..' has been blocked by CORS policy

    Sto aspettando che un amministratore mi attivi.. il sito recita:
    Purtroppo, a causa di numerose iscrizioni di utenti fasulli, da oggi, ogni iscrizione sarà valutata da un amministratore e poi attivata. Nessun problema per gli utenti "seri".
    Però questo forum lo vedo molto attivo, per cui perché denigrarlo ? Solo perché ho acquistato il libro di Alessandra che è in un altro forum ?

    Comunque sono sicuro che anche qua qualcuno sarà abbastanza competente per rispondermi. Se non avvenisse, appena mi permettono di accedere al loro forum e qualcuno mi risponderà con una soluzione, sarò ben felice di aggiornarvi anche qua.

    Resto in attesa da entrambi i forum

    P.S.: non è mica che qualcuno qua ha scritto un libro di javascript ed io ho comprato da un'altra persona.. Questa risposta mi puzza..
  • Re: Access to XMLHttpRequest at 'file:..' has been blocked by CORS policy

    jockerfox ha scritto:


    Access to XMLHttpRequest at 'file:///C:/Users/...../source/repos/Libri/EserciziJavascript/Esercizi/15_json/persona.json' from origin 'null' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, chrome-extension, edge, https, chrome-untrusted.
    Come posso ovviare a tale problema ?
    Direi che il messaggio ti dice tutto. E' prassi da parte dei browser attuare determinate "blindature" di sicurezza, in modo particolare se si carica uno script da un file locale e questo tenta addirittura di accedere a file su disco locale.

    Per risolvere il tuo problema, devi dotarti di un qualsivoglia Web server (es. Apache) e accedere alla tua pagina fruendo del server, e non aprendo direttamente il file in locale. Anche la risorsa da scaricare, ovviamente, andrà espresso con un indirizzo HTTP e non con il protocollo file://.

    Ciao!
  • Re: Access to XMLHttpRequest at 'file:..' has been blocked by CORS policy

    jockerfox ha scritto:


    .....
    Però questo forum lo vedo molto attivo, per cui perché denigrarlo ? Solo perché ho acquistato il libro di Alessandra che è in un altro forum ?
    ...
    P.S.: non è mica che qualcuno qua ha scritto un libro di javascript ed io ho comprato da un'altra persona.. Questa risposta mi puzza..
    Guarda che non denigro proprio nessuno, e tanto meno mi verrebbe in mente di farlo con una MVP, e tra l'altro
    1) Non ho scritto nessun libro
    2) Sono un utente VIP in un altro forum e su questo ( ed anche altri) solo un semplicissimo partecipante
    che quando può cerca di dare una mano ,anche a te, e questo era il senso della risposta.

    Quindi qui quello che ha idee complottiste mi sa tanto che sei solo tu

    Buona continuazione
  • Re: Access to XMLHttpRequest at 'file:..' has been blocked by CORS policy

    sspintux ha scritto:


    jockerfox ha scritto:


    .....
    Però questo forum lo vedo molto attivo, per cui perché denigrarlo ? Solo perché ho acquistato il libro di Alessandra che è in un altro forum ?
    ...
    P.S.: non è mica che qualcuno qua ha scritto un libro di javascript ed io ho comprato da un'altra persona.. Questa risposta mi puzza..
    Guarda che non denigro proprio nessuno, e tanto meno mi verrebbe in mente di farlo con una MVP, e tra l'altro
    1) Non ho scritto nessun libro
    2) Sono un utente VIP in un altro forum e su questo ( ed anche altri) solo un semplicissimo partecipante
    che quando può cerca di dare una mano ,anche a te, e questo era il senso della risposta.

    Quindi qui quello che ha idee complottiste mi sa tanto che sei solo tu

    Buona continuazione
    Calma calma.. ti avevo messo la faccina che ride...
    Scusa se te la sei presa, ma capisco che un messaggio non rende come avere la persona di fronte: ci stavo solo ridendo sopra.
    Cmq beviamoci subito sopra .

    P.S.: ho scritto nel forum di Alessandra, ora aspetto loro risposta e magari posto anche qua il responso.



    @Alka scusami, ma la mia App che usa il componente WebBrowser di VisualStudio per visualizzare una pagina html (che usa javascript) e che deve aggiornare ogni tot secondi la mappa (gli devo passare due variabili), mi dici che non c'è possibilità ? se non fare quel "casino" di installare un server in locale come Apache ??
    No dai.. ci deve essere un metodo alternativo. O no ?
  • Re: Access to XMLHttpRequest at 'file:..' has been blocked by CORS policy

    jockerfox ha scritto:


    ...
    Cmq beviamoci subito sopra .
    ...
    ecco , queste sono le risposte che mi piacciano

    Questione chiarita

    P.S.
    Non tutti possono leggere il libro online (come mi sembra sensato altrimenti l'autore non venderebbe molte copie);
    ergo , non conoscendo il contesto di quell'esercizio, mi è sembrato appropriato consigliarti di chiedere lì

  • Re: Access to XMLHttpRequest at 'file:..' has been blocked by CORS policy

    jockerfox ha scritto:


    ....
    la mia App che usa il componente WebBrowser di VisualStudio per visualizzare una pagina html (che usa javascript) e che deve aggiornare ogni tot secondi la mappa (gli devo passare due variabili), mi dici che non c'è possibilità ? se non fare quel "casino" di installare un server in locale come Apache ??
    No dai.. ci deve essere un metodo alternativo. O no ?
    Non è che mi sia molto chiaro quello che stai facendo,
    ma messa così mi viene da dirti che attraverso il componente webbrowser
    puoi agire sulla pagina che stai visualizzando
    ed anche invocare funzioni javascript (Document.InvokeScript);

    ecco un esempio :
    https://docs.microsoft.com/it-it/dotnet/api/system.windows.forms.htmlelement.innertext?view=netframework-4.7
  • Re: Access to XMLHttpRequest at 'file:..' has been blocked by CORS policy

    Ciao jockerfox,
    Una domanda sul tuo problema: questo codice ti servirà per utilizzarlo come sito web (quindi su un server) o da includere dentro ad un app creata con un altro linguaggio?

    Come diceva giustamente Alka, creare un webserver che punta alla cartella dove sono contenuti i file risolve il problema dei CORS.
    Potrebbe essere disponibile un'estensione per il tuo IDE che crea in modo semplice e veloce un server. Per esempio, con Visual Studio Code, io uso l'estensione Live Server che mi permette di fare questo lavoro premendo semplicemente un bottone.

    Se poi il tuo obiettivo finale sarebbe pubblicare il codice su un server web, il problema si risolverebbe, ma se devi includerlo dentro un app con un componente per la visualizzazione di pagine web, allora ci sono altre valutazioni da fare...
  • Re: Access to XMLHttpRequest at 'file:..' has been blocked by CORS policy

    Intanto ringrazio tutti per le risposte !

    Allora avrei risolto con la chicca di sspintux che mi ha messo la pulce nell'orecchio con:

    sspintux ha scritto:


    https://docs.microsoft.com/it-it/dotne ... mework-4.7
    Per farla breve, ecco come ho risolto il tutto:
    1. Ho una App (chiamiamola App principale) che gira su Desktop. E questa App ha un visualizzatore di mappe (come google maps), che utilizza javascript. NOTA: questa app al primo avvio si carica la pagina HTML la quale viene visualizzata dal componente webbrowser !
    2. Poi ho un'altro programmino (che gira come servizio in Windows ) il quale ogni secondo mi aggiorna/salva in un file le coordinate (latitudine e longitudine) che desidero
    3. Sempre ogni secondo la mia App principale legge questo file (creato dalla programmino di servizio), e subito dopo con la proprietà di "HtmlElement.InnerText" mi vado a modificare un "input type" nella pagina HTML.
    E qua viene il bello: mi sono creato un timer nella pagina html che (sempre ogni secondo) aggiorna la mappa leggendo i valori degli "input type" modificati, appunto, dalla App principale.

    E' un po contorta la spiegazione, ma spero di avervi fatto capire.

    Per cui:
    UN BEL GRAZIE CON LODE A sspintux

    Hai risolto il problema, anche se (come dici tu) <<non è che mi sia molto chiaro quello che stai facendo,>>
    io direi che ti era proprio chiaro !

    P.S.: La prossima volta guarda di darmi consigli un pò prima

    YESSSSSSSSSSSSSSSSSSSSSSSSS !
  • Re: Access to XMLHttpRequest at 'file:..' has been blocked by CORS policy

    jockerfox ha scritto:


    ....
    Allora avrei risolto con la chicca di sspintux
    ...
    ... offri tu chiaramente

    jockerfox ha scritto:


    La prossima volta guarda di darmi consigli un pò prima
    ehhh ... molto dipende da come uno spiega il problema
  • Re: Access to XMLHttpRequest at 'file:..' has been blocked by CORS policy

    F1
Devi accedere o registrarti per scrivere nel forum
13 risposte