2012-08-29 9 views
9

मेरे पास एक ऐसा एप्लिकेशन है जो एक .NET Winforms एप्लिकेशन में वेबब्रोसर नियंत्रण में HTML लिखता है।विंडोज डेस्कटॉप एप्लिकेशन में जावास्क्रिप्ट सक्षम/अक्षम होने पर आप प्रोग्रामेटिक रूप से कैसे पता लगा सकते हैं? (वेबब्रोसर कंट्रोल)

यदि इंटरनेट सेटिंग्स में जावास्क्रिप्ट (या सक्रिय स्क्रिप्टिंग) अक्षम है तो मैं किसी भी तरह प्रोग्रामेटिक रूप से पता लगाना चाहता हूं।

मुझे लगता है कि आपको आईई सुरक्षा सेटिंग्स से पूछने के लिए WMI जैसे कुछ उपयोग करने की आवश्यकता है।

संपादित करें # 1: यह महत्वपूर्ण मैं जानता हूँ कि यदि जावास्क्रिप्ट तो समाधान जो डोम संशोधित एक चेतावनी प्रदर्शित करने के लिए या कि उपयोग टैग मेरी विशेष मामले में लागू नहीं हैं एचटीएमएल प्रदर्शित करने से पहले सक्षम होता है। मेरे मामले में, यदि जावास्क्रिप्ट उपलब्ध नहीं है तो मैं इसके बजाय मूल RichTextBox में सामग्री प्रदर्शित करूंगा और मैं यह भी रिपोर्ट करना चाहता हूं कि जेएस सर्वर एप्लिकेशन पर वापस सक्षम है या नहीं, इसलिए मैं ऐसे व्यवस्थापक को बता सकता हूं जो अलर्ट भेजता है कि 5% या 75% उपयोगकर्ताओं के पास जेएस सक्षम है या नहीं।

+0

आशा है कि आपने इसे पहले ही चेक किया है? - http://social.msdn.microsoft.com/Forums/en/csharpgeneral/thread/07df5263-613c-4780-89a2-67ebf2a1e670 – NinethSense

+0

@ blak3r मेरा उत्तर देखें, यह आपकी समस्याओं का समाधान करेगा। –

+0

@ Erx_VB.NExT.Coder अच्छे उत्तर के लिए धन्यवाद। आप 5 घंटे बहुत देर हो चुकी थीं:/मैंने जो उत्तर पोस्ट किया है वह वही दृष्टिकोण लेता है जिसे आपने रजिस्ट्री की जांच के लिए रेखांकित किया है। पूर्णता के लिए आपका जवाब +1 किया। – blak3r

उत्तर

5

धन्यवाद Kickaha के सुझाव। यहां एक साधारण विधि है जो रजिस्ट्री को यह देखने के लिए जांचती है कि यह सेट है या नहीं। शायद कुछ मामलों में जहां यह एक अपवाद फेंक सकता है तो उन्हें संभालना सुनिश्चित करें।

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; 
    } 

नोट: इस कोड नमूना कम रखने (और क्योंकि मैं केवल इंटरनेट क्षेत्र के बारे में परवाह) के हित में - इस विधि केवल इंटरनेट क्षेत्र की जाँच करता है। आप ज़ोन को बदलने के लिए OpenSubKey लाइन के अंत में 3 को संशोधित कर सकते हैं।

1

यहां एक सुझाव है - डिफ़ॉल्ट रूप से अपने वेबपृष्ठ में चेतावनी को एन्कोड करें। एक जावास्क्रिप्ट बनाएं जो पेज लोड पर चलता है जो उस तत्व को हटा देता है। चेतावनी तब होगी जब कभी जावास्क्रिप्ट चलाने की अनुमति नहीं है।

यह लंबे समय से है क्योंकि मैंने क्लाइंट साइड एचटीएमएल जावास्क्रिप्ट को डीओएम के साथ बातचीत करने के लिए कोड किया है, इसलिए मैं थोड़ी देर से बाहर हो सकता हूं। यानी आपको विवरण ठीक करने की आवश्यकता होगी, लेकिन मुझे उम्मीद है कि मुझे सामान्य विचार मिल जाएगा।

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

और अपने HTML शरीर में @ करने के लिए

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

यह कुछ लोगों के लिए एक अच्छा सुझाव है। लेकिन, मेरे पास पूर्व उद्देश्य हैं जिनके लिए मुझे पता है कि जावास्क्रिप्ट को HTML प्रदर्शित करने से पहले जावास्क्रिप्ट सक्षम है या नहीं। मैं ए) व्यवस्थापक को चेतावनी देने के लिए इस सर्वर को एक रिपोर्ट पर रिपोर्ट करना चाहता हूं ... और बी) यदि जावास्क्रिप्ट सक्षम नहीं है तो मैं सामग्री को मूल रूप में प्रदर्शित करता हूं। – blak3r

+0

मुझे एसओ में कहीं और यह टिप्पणी मिली, एक कुकी सेट करने के बारे में और यह अच्छी समझ में आता है। मैं एक छिपे हुए आईफ्रेम के एक संकुचित समाधान के बारे में सोच रहा था जिसे आप सर्वर से अन्य पेज लोड करने के लिए प्राप्त करते हैं (जो आपको क्वेरी स्ट्रिंग में सर्वर पर जानकारी वापस भेजने की अनुमति देता है .. अगर मुझे सही याद है ...) "वहां नहीं है" सर्वर-साइड जावास्क्रिप्ट पहचान करने का एक अच्छा तरीका नहीं है। इसके बजाय, कुकी सेट करने के लिए जावास्क्रिप्ट का उपयोग करें, और उसके बाद उस पृष्ठ के लिए सर्वर-साइड स्क्रिप्टिंग का उपयोग करके उस पृष्ठ के लिए परीक्षण करें; सामग्री को उचित रूप से वितरित करें। " यह आपको एक प्रारंभिक पृष्ठ रीफ्रेश या रीडायरेक्ट करेगा .. – Kickaha

+0

हाँ वेबपृष्ठों से निपटने पर सर्वर पक्ष जावास्क्रिप्ट सत्यापन नहीं कर सकता है। मेरे पास एक अलग एप्लीकेशन है जहां मैं उपयोगकर्ता को संदेश प्रदर्शित कर रहा हूं। चूंकि मेरे पास डेस्कटॉप ऐप है, इसलिए मुझे इसका पता लगाने और सर्वर को बताने में सक्षम होना चाहिए। कुकीज़ का उपयोग करके आपका सुझाया गया समाधान एक और अच्छा सुझाव है लेकिन ऐसा करने के लिए एक कठिन तरीका लगता है, तो यह होना चाहिए। इसके अलावा यह मेरे डेस्कटॉप ऐप को नहीं बताता है कि सर्वर पर एक अलग वेबरेक्वेस्ट किए बिना जावास्क्रिप्ट सक्षम है या नहीं जावास्क्रिप्ट सक्षम है? वेबcontrol के बाहर कुछ में। – blak3r

2

यदि आपको पॉपअप पॉप अप करने में समस्याएं आ रही हैं, तो मैंने आपके लिए एक समाधान शामिल किया है, और यदि आप क्लाइंट मशीन पर जावास्क्रिप्ट को अक्षम/सक्षम करना चाहते हैं (या यहां तक ​​कि अगर इसे सक्षम/अक्षम किया गया है तो केवल पढ़ने/क्वेरी) ive में आपके लिए भी उत्तर शामिल है, यहां हम जाते हैं:

आप किस पॉपअप संदेश को अक्षम करना चाहते हैं? अगर यह चेतावनी संदेश है, तो इसे स्पष्ट रूप से विंडो या फ्रेम ऑब्जेक्ट को अपनी विशेष ज़रूरतों को हल करने का प्रयास करें, मैंने अभी शीर्ष-स्तरीय दस्तावेज़ ग्रहण किया है, लेकिन अगर आपको आईफ्रेम की आवश्यकता है तो आप window.frames (0) का उपयोग कर इसे एक्सेस कर सकते हैं। पहले फ्रेम के लिए और इतने पर ... (जावास्क्रिप्ट भाग फिर से करें) ... यहां कुछ कोड है, मान लीजिए डब्लूबी आपका वेबब्रोसर नियंत्रण है ...

डब्ल्यूबी.डॉक्यूमेंट.parentWindow.execScript "window.alert = function() {}; "," जेस्क्रिप्ट "

पूरे पृष्ठ को लोड होने के बाद ही आपको उपरोक्त कोड चलाना होगा, मुझे समझ में आता है कि यह करना बहुत मुश्किल है (और एक पूर्ण-प्रमाण संस्करण अभी तक प्रकाशित नहीं हुआ है) हालांकि मैं अब कुछ समय के लिए इसे (पूर्ण प्रमाण) कर रहा हूं, और यदि आप "वेबब्रोसर" और "वेबब्रोसर-कंट्रोल" लेबल वाले मेरे पिछले उत्तरों में से कुछ पढ़ते हैं, तो आप इसे सटीक तरीके से कैसे करें, लेकिन वापस लौटने पर संकेतों को इकट्ठा कर सकते हैं हाथ में सवाल, अगर आप .confirm जावास्क्रिप्ट संदेश को रद्द करना चाहते हैं, तो window.confirm के साथ window.alert को प्रतिस्थापित करें (बेशक, अपनी खिड़की को अर्हता प्राप्त करें। obje आपके द्वारा काम कर रहे दस्तावेज़ पदानुक्रम तक पहुंचने के लिए सही ऑब्जेक्ट के साथ सीटी)। आप भी अक्षम कर सकते हैं।उपर्युक्त तकनीक और नई IE9 .prompt विधि के साथ प्रिंट विधि भी।

यदि आप जावास्क्रिप्ट को पूरी तरह से अक्षम करना चाहते हैं, तो आप इसे करने के लिए रजिस्ट्री का उपयोग कर सकते हैं, और आपको वेबब्रोसर नियंत्रण मेमोरी में लोड होने से पहले रजिस्ट्री परिवर्तन करना होगा, और हर बार जब आप इसे बदलते हैं (बंद) पर आपको पुनः लोड करना होगा वेबब्रोसर नियंत्रण और स्मृति में नियंत्रण (या बस अपने आवेदन को पुनरारंभ करें)।

रजिस्ट्री कुंजी \HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\ है - कीनेम 1400 है और मूल्य यह 3 है निष्क्रिय करने के लिए, और यह 0.

बेशक

है सक्षम करने के लिए, क्योंकि वहाँ क्षेत्र के तहत 5 जोनों के लिए महत्वपूर्ण हैं, आप की जरूरत है या तो इसे सक्रिय क्षेत्र या सभी क्षेत्रों के लिए सुनिश्चित करने के लिए बदलें। हालांकि, अगर आपको बस इतना करना है तो आपको वास्तव में ऐसा करने की ज़रूरत नहीं है, वह सुपर जेएस संवाद पॉपअप संदेश है।

मुझे बताएं कि आप कैसे जाते हैं, और यदि मैं आगे की मदद कर सकता हूं।

संबंधित मुद्दे

 संबंधित मुद्दे