2015-10-18 10 views
6

W Visual Studio 2015 aplikacji "Javascript uniwersalny Windows" Mam to bardzo prosty kod:Visual Studio 2015 javascript dostęp do DOM elementy

<!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> 

Gdybym uruchomić aplikację, wybierając "maszyna lokalna" lub jakiegokolwiek systemu Windows Emulator telefonu, widzę "PRZED": linia, która zmienia innerHtml div nie jest wykonywana.

W przeciwnym razie, jeśli wykonuję plik HTML poza programem Visual Studio, w oknie przeglądarki widzę komunikat "AFTER": dotyczy wszystkich przeglądarek, z niewielkim wyjątkiem w działaniu programu Internet Explorer 11: w tym przypadku Widzę komunikat "Internet Explorer ograniczył tę stronę do uruchamiania skryptów lub kontrolek ActiveX", a kiedy klikam "zezwalaj na treść", widzę "AFTER".

Dlaczego ten bardzo prosty skrypt nie działa w Visual Studio? Czy jest to kwestia ograniczeń bezpieczeństwa, jak w IE? I dlaczego w Visual Studio nie widzę żadnej wiadomości o problemie? Jak mogę rozwiązać ten problem w Visual Studio?

Odpowiedz

4

Przetestowałem Twój kod. To prawda, ale powinieneś napisać swój kod w plikach javascript. Po prostu przenieś window.onload na początku pliku default.js.

+0

Dziękuję. To niewiarygodne, że Visual Studio nie pokazuje w tym przypadku wiadomości!W mojej prawdziwej aplikacji potrzebuję tylko 2 linii javascriptu, dlatego zostawiłem je w pliku html. – Sean

0

Jedną z możliwych przyczyn może być kod wewnątrz znaczników skryptu js zastępujący metodę window.onload. Wydaje się, że używasz kombinacji ścieżek względnych i bezwzględnych w znaczniku skryptu. Zatem podczas pracy poza visual studio pliki te mogą nie zostać włączone, więc plik window.onload nie zostanie nadpisany. Kilka kroków do debugowania byłoby:

  1. Sprawdź web developer konsola błędów, błędy sieciowe itd. (Z F12 pamięci w IE)
  2. Usuń wszystkie inne znaczniki skryptów i testów.
  3. Wypróbuj window.addEventListener("load", function{ }, false); zamiast window.onload.
+0

Dziękuję. Depruciłem kod w następujący sposób, ale zachowanie jest dokładnie takie samo i nie ma błędu w F12. Nawet zdarzenie onclick przycisku nie działa w emulatorach i na komputerze lokalnym.

BEFORE
Sean

4

To naprawdę nie jest błąd, dlatego VS 2015 nie zasygnalizuje tego.

Faktem jest, że skrypty inline nie są dozwolone w Universal Apps ponieważ jest a common cause CSS (cross-site scripting) ataki.

Zobacz pierwszy z Remarks na końcu łącza do dokumentacji Microsoft.

Niektóre obejścia są omówione here.

Powiązane problemy