2012-08-29 16 views
9

Tôi có một ứng dụng viết HTML vào một điều khiển WebBrowser trong một ứng dụng .NET winforms.Làm thế nào bạn có thể lập trình phát hiện nếu javascript được bật/tắt trong ứng dụng Windows Desktop? (WebBrowser Control)

Tôi muốn phát hiện bằng cách nào đó theo lập trình nếu Cài đặt Internet có Javascript (hoặc Active Scripting) được tắt.

Tôi đoán bạn cần phải sử dụng một cái gì đó như WMI để truy vấn Cài đặt bảo mật của IE.

EDIT # 1: Điều quan trọng là tôi biết nếu javascript được bật trước khi hiển thị HTML để các giải pháp sửa đổi DOM hiển thị cảnh báo hoặc sử dụng thẻ không được áp dụng trong trường hợp cụ thể của tôi. Trong trường hợp của tôi, nếu javascript không có sẵn, tôi sẽ hiển thị nội dung trong RichTextBox gốc và tôi cũng muốn báo cáo liệu JS có được bật lại cho ứng dụng máy chủ để tôi có thể thông báo cho quản trị viên gửi cảnh báo 5% hoặc 75% người dùng có bật JS hay không.

+0

Hy vọng bạn đã kiểm tra điều này? - http://social.msdn.microsoft.com/Forums/en/csharpgeneral/thread/07df5263-613c-4780-89a2-67ebf2a1e670 – NinethSense

+0

@ blak3r kiểm tra câu trả lời của tôi, nó sẽ giải quyết vấn đề của bạn. –

+0

@ Erx_VB.NExT.Coder Cảm ơn câu trả lời hay. Bạn đã 5 giờ quá muộn mặc dù:/Câu trả lời tôi đăng có cùng một cách tiếp cận bạn vạch ra để kiểm tra sổ đăng ký. Đã +1 câu trả lời của bạn cho sự hoàn chỉnh. – blak3r

Trả lời

5

Nhờ @ đề nghị Kickaha của. Đây là một phương pháp đơn giản kiểm tra sổ đăng ký để xem nó có được đặt hay không. Có lẽ một số trường hợp mà điều này có thể ném một ngoại lệ vì vậy hãy chắc chắn để xử lý chúng.

const string DWORD_FOR_ACTIVE_SCRIPTING = "1400"; 
    const string VALUE_FOR_DISABLED = "3"; 
    const string VALUE_FOR_ENABLED = "0"; 

    public static bool IsJavascriptEnabled() 
    { 
     bool retVal = true; 
     //get the registry key for Zone 3(Internet Zone) 
     Microsoft.Win32.RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\3", true); 

     if (key != null) 
     { 
      Object value = key.GetValue(DWORD_FOR_ACTIVE_SCRIPTING, VALUE_FOR_ENABLED); 
      if(value.ToString().Equals(VALUE_FOR_DISABLED)) 
      { 
       retVal = false; 
      } 
     } 
     return retVal; 
    } 

Lưu ý: để giữ mẫu mã này ngắn (và vì tôi chỉ quan tâm đến Internet Zone) - phương pháp này chỉ kiểm tra vùng internet. Bạn có thể sửa đổi 3 ở cuối dòng OpenSubKey để thay đổi vùng.

1

Đây là đề xuất - Mã hóa cảnh báo vào trang web của bạn làm mặc định. Tạo một javascript chạy trên tải trang để loại bỏ phần tử đó. Cảnh báo sẽ có khi javascript không được phép chạy.

Đó là một thời gian dài kể từ khi tôi mã hóa JavaScript HTML phía máy khách để tương tác với DOM để tôi có thể hơi lạc hậu. tức là bạn sẽ cần sửa các chi tiết, nhưng tôi hy vọng tôi sẽ có được ý tưởng chung.

<script> 
document.getElemntByID("noJavascriptWarning").innerHTML=""; 
</script> 

và trong cơ thể của HTML của bạn

<DIV id="noJavascriptWarning" name="noJavaScriptWarning">Please enable Javascript</DIV> 
+0

Đây là một gợi ý tốt cho một số người. Nhưng, tôi có động cơ thầm kín yêu cầu tôi biết nếu javascript được bật trước khi hiển thị HTML. Tôi sẽ A) muốn báo cáo lại cho máy chủ để cảnh báo quản trị viên ... và B) nếu javascript không được bật, tôi sẽ hiển thị nội dung dưới dạng gốc. – blak3r

+0

Tôi tìm thấy bình luận này ở nơi khác trong SO, về việc thiết lập một cookie và nó có ý nghĩa tốt. Tôi đã suy nghĩ về một giải pháp contrived của một iFrame ẩn mà bạn nhận được để tải các trang khác từ máy chủ (cho phép bạn gửi thông tin trở lại máy chủ trong chuỗi truy vấn .. nếu tôi nhớ chính xác ...) "There isn ' Thay vào đó, hãy sử dụng JavaScript để đặt cookie và sau đó kiểm tra cookie đó bằng cách sử dụng kịch bản phía máy chủ trên các lượt xem trang tiếp theo; cung cấp nội dung phù hợp. " Bạn sẽ mất một trang làm mới hoặc chuyển hướng ban đầu .. – Kickaha

+0

không thể thực hiện xác thực javascript phía máy chủ ... khi xử lý các trang web. Tôi có một ứng dụng khác mà tôi đang hiển thị thông báo cho người dùng. Vì tôi có một ứng dụng dành cho máy tính để bàn nên tôi có thể phát hiện ra điều này và nói với máy chủ. Giải pháp được đề xuất của bạn bằng cách sử dụng cookie là một đề xuất tốt nhưng có vẻ như là một cách khó hơn để làm điều đó thì nó phải như vậy. Ngoài ra, ứng dụng này không cho biết ứng dụng dành cho máy tính để bàn của tôi có bật javascript hay không mà không thực hiện yêu cầu web trở lại máy chủ làJavascriptEnabled? trong một cái gì đó bên ngoài webcontrol. – blak3r

2

Nếu bạn gặp khó khăn khi cửa sổ bật lên bật lên, tôi đã đưa ra giải pháp cho bạn và nếu bạn muốn tắt/bật javascript trên máy khách thứ (hoặc thậm chí chỉ đọc/truy vấn nếu nó được bật/tắt) Tôi cũng bao gồm câu trả lời đó cho bạn, ở đây chúng tôi đi:

Bạn muốn tắt thông báo bật lên nào? Nếu đó là thông điệp cảnh báo, hãy thử điều này, rõ ràng là giải quyết cửa sổ hoặc khung đối tượng theo nhu cầu cụ thể của bạn, tôi đã giả định tài liệu cấp cao nhất, nhưng nếu bạn cần iframe, bạn có thể truy cập nó bằng window.frames (0). đối với khung hình đầu tiên và vân vân ... (xem lại phần JavaScript) ... dưới đây là một số mã, giả sử WB là bộ điều khiển webbrowser của bạn ...

WB.Document.parentWindow.execScript "window.alert = function() {}; "," JScript "

Bạn chỉ phải chạy mã trên sau khi toàn bộ trang được tải xong, tôi hiểu điều này rất khó thực hiện (và phiên bản đầy đủ chưa được xuất bản Tuy nhiên, tôi đã thực hiện nó (bằng chứng đầy đủ) trong một thời gian và bạn có thể thu thập các gợi ý về cách thực hiện điều này một cách chính xác nếu bạn đọc một số câu trả lời trước đây của tôi có nhãn "webbrowser" và "webbrowser-control", nhưng quay lại câu hỏi trong tầm tay, nếu bạn muốn hủy bỏ thông báo JavaScript .confirm, chỉ cần thay thế window.alert bằng window.confirm (tất nhiên, đủ điều kiện cửa sổ của bạn. ct với đối tượng chính xác để đạt được thứ bậc tài liệu mà bạn đang làm việc). Bạn cũng có thể vô hiệu hóa.phương pháp in với kỹ thuật trên và phương pháp IE9 .prompt mới.

Nếu bạn muốn tắt JavaScript hoàn toàn, bạn có thể sử dụng sổ đăng ký để thực hiện việc này và bạn phải thay đổi đăng ký trước khi bộ điều khiển trình duyệt web tải vào bộ nhớ và mỗi lần bạn thay đổi nó (trên &) webbrowser kiểm soát và vào bộ nhớ (hoặc chỉ cần khởi động lại ứng dụng của bạn).

Chìa khóa registry là \HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\ - các KeyName là 1400 và giá trị để vô hiệu hóa nó là 3, và để kích hoạt nó là 0.

Tất nhiên, vì có 5 khu thuộc khu quan trọng, bạn cần phải hoặc thay đổi nó cho khu vực hoạt động hoặc cho tất cả các khu vực để chắc chắn. Tuy nhiên, bạn thực sự không cần phải làm điều này nếu tất cả những gì bạn muốn làm là thông báo bật lên hộp thoại bật lên js.

Hãy cho tôi biết cách bạn thực hiện và nếu tôi có thể trợ giúp thêm.

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