2015-10-18 43 views
6

在一個Visual Studio 2015「的Javascript萬能的Windows」應用程序,我有這樣的代碼非常簡單:的Visual Studio 2015年的JavaScript訪問DOM元素

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

如果我運行應用程序,選擇「本地計算機」或任何Windows電話模擬器,我看到「BEFORE」:更改div的innerHtml的行不被執行。否則,如果我在瀏覽器窗口中執行Visual Studio之外的HTML文件,我會看到「AFTER」:對於所有瀏覽器都是如此,在Internet Explorer 11的行爲中有一點例外:在這種情況下我看到消息「Internet Explorer禁止運行腳本或ActiveX控件的網頁」,當我點擊「允許內容」時,我看到「AFTER」。

爲什麼這個非常簡單的腳本在Visual Studio中不起作用?這是安全限制的問題,就像在IE中一樣? 爲什麼我在Visual Studio中看不到有關此問題的任何消息? 如何在Visual Studio中解決此問題?

回答

4

我測試了你的代碼。這是真的,但你應該在JavaScript文件中寫你的代碼。只需在default.js開始處移動window.onload即可。

+0

謝謝。在這種情況下Visual Studio不顯示消息是令人難以置信的!在我真正的應用程序中,我只需要2行javascript,因此我將它們留在了html文件中。 – Sean

0

一個可能的原因可能是js腳本標記中的代碼覆蓋了window.onload方法。您似乎在腳本標記包含中使用了相對路徑和絕對路徑的組合。因此,在Visual Studio外部運行時,這些文件可能不會被包含,因此window.onload不會被覆蓋。一些步驟來調試是:

  1. 檢查Web開發者控制檯中的錯誤,網絡錯誤等(從IE內存F12)
  2. 刪除所有其他腳本標記和測試。
  3. 嘗試window.addEventListener("load", function{ }, false);而不是window.onload
+0

謝謝。我已經按照如下所示清除了代碼,但行爲完全相同,並且F12中沒有錯誤。即使按鈕的onclick事件在模擬器和本地機器中也不起作用。 <!DOCTYPE HTML>

BEFORE
Sean

4

這不是一個真正的錯誤,這就是爲什麼VS 2015不會發出信號。

事實上,內聯腳本不允許在Universal Apps中使用,因爲它是CSS(跨站點腳本)攻擊的a common cause

請參閱Remarks的第一個鏈接到Microsoft文檔的末尾。

討論了一些解決方法here