2015-10-18 15 views
6

Trong Visual Studio 2015 "javascript phổ Windows" ứng dụng tôi có mã này rất đơn giản:Visual studio 2015 javascript quyền truy cập vào DOM yếu tố

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

Nếu tôi chạy ứng dụng, chọn "máy địa phương" hoặc bất kỳ Windows Giả lập điện thoại, tôi thấy "TRƯỚC": dòng thay đổi innerHtml của div không được thực hiện.

Nếu không, nếu tôi thực thi tệp html bên ngoài Visual Studio, trong cửa sổ trình duyệt, tôi thấy "SAU": điều này đúng với tất cả các trình duyệt, ngoại trừ một chút trong hành vi của Internet Explorer 11: trong trường hợp này Tôi thấy thông báo "Internet Explorer đã hạn chế trang web này chạy tập lệnh hoặc điều khiển activex" và khi tôi nhấp vào "cho phép nội dung" tôi thấy "SAU".

Tại sao tập lệnh rất đơn giản này không hoạt động trong Visual Studio? Đó có phải là vấn đề về các hạn chế về bảo mật, như trong IE không? Và tại sao tôi không thấy bất kỳ thông báo nào trong Visual Studio về vấn đề này? Làm thế nào tôi có thể giải quyết vấn đề này trong Visual Studio?

Trả lời

4

Tôi đã kiểm tra mã của bạn. Đó là sự thật nhưng bạn nên viết mã của bạn bên trong các tập tin javascript. Chỉ cần di chuyển window.onload vào đầu của default.js.

+0

Cảm ơn bạn. Thật không thể tin được rằng Visual Studio không hiển thị thông báo trong trường hợp này!Trong ứng dụng thực sự của tôi, tôi chỉ cần 2 dòng javascript, vì lý do này tôi để chúng trong tệp html. – Sean

0

Một nguyên nhân có thể là mã bên trong thẻ tập lệnh js ghi đè phương thức window.onload. Bạn dường như đang sử dụng kết hợp các đường dẫn tương đối và tuyệt đối trong thẻ tập lệnh bao gồm. Vì vậy, khi chạy ngoài studio trực quan, các tệp này có thể không được đưa vào để window.onload không bị ghi đè. Một số bước để gỡ lỗi sẽ là:

  1. Kiểm tra web phát triển giao diện điều khiển lỗi, lỗi mạng vv (Từ F12 bộ nhớ trong IE)
  2. Remove tất cả các thẻ script khác và thử nghiệm.
  3. Hãy thử window.addEventListener("load", function{ }, false); thay vì window.onload.
+0

Cảm ơn bạn. Tôi đã depurated mã như sau, nhưng hành vi là chính xác như nhau và không có lỗi trong F12. Ngay cả sự kiện onclick của một nút không hoạt động trong các trình giả lập và máy cục bộ.

BEFORE
Sean

4

Nó không thực sự là một lỗi, đó là lý do tại sao VS 2015 sẽ không báo hiệu nó.

Thực tế là tập lệnh nội tuyến không được phép trong Universal Apps vì nó là a common cause của cuộc tấn công CSS (cross-site scripting).

Xem phần đầu tiên của số Remarks ở cuối liên kết tới tài liệu của Microsoft.

Một số cách giải quyết được thảo luận here.

Các vấn đề liên quan