2015-10-18 13 views
6

In Visual Studio 2015 applicazione "Javascript universale Windows" Ho questo codice molto semplice:studio visivo 2015 javascript accesso a dom elementi

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="utf-8" /> 

    <!-- WinJS references --> 
    <link href="WinJS/css/ui-dark.css" rel="stylesheet" /> 
    <script src="WinJS/js/base.js"></script> 
    <script src="WinJS/js/ui.js"></script> 

    <!-- aaaaa references --> 
    <link href="/css/default.css" rel="stylesheet" /> 
    <script src="/js/default.js"></script> 
</head> 

<body class="win-type-body"> 

    <div id="myDiv">BEFORE</div> 

    <script>    

     window.onload = function() { 
      document.getElementById("myDiv").innerHTML = "AFTER"; 
     }; 


    </script> 
</body> 

</html> 

Se eseguo l'applicazione, la scelta di "macchina locale" o qualsiasi Windows Emulatore di telefono, vedo "PRIMA": la riga che cambia il innerHtml del div non viene eseguita.

Altrimenti, se eseguo il file html all'esterno di Visual Studio, in una finestra del browser, vedo "AFTER": questo è vero per tutti i browser, con una piccola eccezione nel comportamento di Internet Explorer 11: in questo caso Vedo il messaggio "Internet Explorer ha limitato questa pagina web dall'esecuzione di script o controlli activex" e quando faccio clic su "consenti il ​​contenuto", vedo "DOPO".

Perché questo script molto semplice non funziona in Visual Studio? Si tratta di restrizioni di sicurezza, come in IE? E perché non vedo alcun messaggio in Visual Studio sul problema? Come posso risolvere questo problema in Visual Studio?

risposta

4

Ho testato il codice. È vero, ma dovresti scrivere il tuo codice all'interno dei file javascript. Basta spostare window.onload all'inizio del file default.js.

+0

Grazie. È incredibile che Visual Studio non mostri un messaggio in questo caso!Nella mia vera app ho solo bisogno di 2 linee di javascript, per questo motivo le ho lasciate nel file html. – Sean

0

Una possibile causa potrebbe essere il codice all'interno dei tag script js che sovrascrivono il metodo window.onload. Sembra che tu stia usando un mix di percorsi relativi e assoluti nel tag dello script. Quindi, quando si esegue fuori dallo studio visivo, questi file potrebbero non essere inclusi, quindi il window.onload non viene sovrascritto. sarebbero Alcuni passi per eseguire il debug:

  1. Controllare console sviluppatore web per errori, errori di rete ecc (Da F12 memoria in IE)
  2. rimuovere tutti gli altri tag di script e di prova.
  3. Provare window.addEventListener("load", function{ }, false); anziché window.onload.
+0

Grazie. Ho depurato il codice come segue, ma il comportamento è esattamente lo stesso e non vi è alcun errore in F12. Anche l'evento onclick di un pulsante non funziona negli emulatori e nella macchina locale.

BEFORE
Sean

4

Non è proprio un errore, per questo VS 2015 non lo segnalerà.

Il fatto è che script non ancorati non siano ammessi a Universal Apps perché è a common cause di CSS (cross-site scripting) attacchi.

Vedere il primo dello Remarks alla fine del collegamento alla documentazione Microsoft.

Alcuni workaround sono discussi here.

Problemi correlati