दिलचस्प पोस्ट
एंड्रॉइड 4.4 के साथ इम्यूलेट मिफेर कार्ड एप (22.0.0) और टेस्ट ऐप (21.0.3) के लिए हल संस्करणों में भिन्नता है एक्लिप्स में लाइब्रेरी v7 AppCompat को जोड़ने पर "कोई संसाधन नहीं मिला जो दिए गए नाम से मेल खाता है" त्रुटि को कैसे हल करें? जब कोई कॉल केवल एक ऑब्जेक्ट देता है तो मैं पॉवरहेल्ड को एक सरणी वापस कैसे कर सकता हूं? लिनक्स: एक ही पंक्ति पर एक विशिष्ट शब्द के बाद एक शब्द निकालें Django – रेंडर (), render_to_response () और direct_to_template () के बीच अंतर क्या है? क्यूटी क्रिएटर में पथ कैसे शामिल करें? विशेषता मूल्य पर आधारित DOM में एक तत्व ढूंढें किसी वर्ग के बिना तत्वों का चयन करें jQuery सीएसएस – <style> -tag में लिखें आर के लिए प्रॉक्सी सेटिंग मैं XPath के माध्यम से सीडीएटीए मार्कअप के भीतर तत्व पाठ कैसे प्राप्त करूं? सीतनिद्रा में होना एनोटेशन – कौन सा बेहतर है, क्षेत्र या संपत्ति का उपयोग? PHP सरणी को जावास्क्रिप्ट में कनवर्ट करें समूहवार अधिकतम

जावास्क्रिप्ट में एक ActiveX इवेंट को कैसे प्रबंधित करें

यह एक उत्तर के लिए कुछ अनुवर्ती है

मेरे पास एक कस्टम एक्टिवक्स नियंत्रण है जो वेब ब्राउज़र में जावास्क्रिप्ट द्वारा एक ईवेंट ("ReceivMessage" को "msg" पैरामीटर के साथ) बढ़ाया जा रहा है जो कि उसे संभालना है। ऐतिहासिक रूप से हम विभिन्न परियोजनाओं पर इसे पूरा करने के लिए निम्न IE-only वाक्यविन्यास का उपयोग करने में सक्षम हैं:

function MyControl::ReceiveMessage(msg) { alert(msg); } 

हालांकि, जब एक लेआउट के अंदर नियंत्रण दफन किया जाता है, तो जावास्क्रिप्ट नियंत्रण नहीं मिल सकता है। विशेष रूप से, यदि हम इसे एक सादे HTML पृष्ठ में डालते हैं तो यह ठीक काम करता है, लेकिन अगर हम इसे <Form> टैग द्वारा लिखे गए एएसपीएक्स पृष्ठ में डालते हैं, तो हमें "मायकंट्रोल अपरिभाषित" त्रुटि मिलती है। हमने निम्न पर भिन्नताएं करने की कोशिश की है:

 var GetControl = document.getElementById("MyControl"); function GetControl::ReceiveMessage(msg) { alert(msg); } 

… लेकिन यह जावास्क्रिप्ट त्रुटि में परिणाम "GetControl अपरिभाषित है।"

ActiveX नियंत्रण से भेजे जाने वाले ईवेंट को संभालने का सही तरीका क्या है? अभी हम IE में यह काम करने में रुचि रखते हैं। हम क्या कर रहे हैं, इसके लिए यह एक कस्टम एक्टिवएक्स नियंत्रण होना चाहिए।

धन्यवाद।

वेब के समाधान से एकत्रित समाधान "जावास्क्रिप्ट में एक ActiveX इवेंट को कैसे प्रबंधित करें"

मैं निम्न स्क्रिप्ट ब्लॉक प्रारूप का उपयोग करके यह कार्य प्राप्त करने में सक्षम था, लेकिन यह अभी भी उत्सुक है अगर यह सबसे अच्छा तरीका है:

 <script for="MyControl" event="ReceiveMessage(msg)"> alert(msg); </script> 

मैंने पहले अपने अनुप्रयोगों में activex का उपयोग किया है मैं ऑब्जेक्ट टैग को asp.net प्रपत्र में रखता हूं और मेरे लिए निम्नलिखित जावास्क्रिप्ट काम करता है।

 function onEventHandler(arg1, arg2){ // do something } window.onload = function(){ var yourActiveXObject = document.getElementById('YourObjectTagID'); if(typeof(yourActiveXObject) === 'undefined' || yourActiveXObject === null){ alert('Unable to load ActiveX'); return; } // attach events var status = yourActiveXObject.attachEvent('EventName', onEventHandler); } 

ठीक है, लेकिन अगर आप सी # (.NET 2.0) को विरासत में मिली उपयोगकर्ता कंट्रोल (एक्टिवएक्स) के साथ प्रयोग कर रहे हैं … इसे काम करने का एकमात्र तरीका है ईवेंट के हैंडलर कार्यप्रणाली को "विस्तार" करना: http://www.codeproject.com/KB /dotnet/extend_events.aspx?display=Print

हमारे मित्र श्री वर्नर विल्मेसेंस से उपरोक्त परियोजना लिंक ने मेरी परियोजना को बचाया है। यदि आप ऐसा नहीं करते हैं, तो जावास्क्रिप्ट ईवेंट हैंडलर के साथ बाध्य नहीं कर सकता।

उन्होंने उदाहरण के लिए उन्होंने "विस्तार" का इस्तेमाल किया उदाहरण के कारण, लेकिन अगर आप इसे सरल बनाते हैं, सीधे ही घटना को संभाल कर देते हैं, यह काम करता है C # ActiveX को "ScriptCallbackObject" का समर्थन करने के लिए नीचे की तरह एक जावास्क्रिप्ट समारोह में घटना को बाँधना चाहिए:

  var clock = new ActiveXObject("Clocks.clock"); var extendedClockEvents = clock.ExtendedClockEvents(); // Here you assign (subscribe to) your callback method! extendedClockEvents.ScriptCallbackObject = clock_Callback; ... function clock_Callback(time) { document.getElementById("text_tag").innerHTML = time; } 

बेशक आपको IObjectSafety और अन्य सुरक्षा सामग्री को कार्यान्वित करना होगा ताकि यह बेहतर काम कर सके।

यदि आपके पास अपने पृष्ठ पर एक ActiveX तत्व है जिसमें 'MyControl' का आईडी है तो आपका जावास्क्रिप्ट हैंडलर सिंटैक्स यह है:

 function MyControl::ReceiveMessage(msg) { alert(msg); } 

मैंने पाया कि यह कोड किसी प्रपत्र टैग के भीतर काम करता है। इस उदाहरण में, कॉलबैक एक फ़ंक्शन पैरामीटर है जो जावास्क्रिप्ट द्वारा ActiveX नियंत्रण में पारित किया गया है, और callbackparam activeX नियंत्रण के भीतर उत्पन्न कॉलबैक ईवेंट का एक पैरामीटर है। इस तरह से मैं किसी भी प्रकार के ईवेंट के लिए एक ही ईवेंट हैंडलर का उपयोग करता हूं, बजाय अलग ईवेंट हैंडलर्स के एक समूह को घोषित करने का प्रयास करने के बजाय

<object id="ActivexObject" name="ActivexObject" classid="clsid:15C5A3F3-F8F7-4d5e-B87E-5084CC98A25A"></object>

<script>
function document.ActivexObject::OnCallback(callback, callbackparam){
callback(callbackparam);
}
</script>

मेरे मामले में, मुझे गतिशील रूप से ActiveX नियंत्रण बनाने और उनके कार्यक्रमों को सुनने के लिए एक तरीका चाहिए मैं काम करने के लिए इस तरह कुछ प्राप्त करने में सक्षम था:

 //create the ActiveX var ax = $("<object></object>", { classid: "clsid:" + clsid, codebase: install ? cabfile : undefined, width: 0, height: 0, id: '__ax_'+idIncrement++ }) .appendTo('#someHost'); 

और फिर एक घटना के लिए एक हेन्डलर रजिस्टर करने के लिए:

 //this function registers an event listener for an ActiveX object (obviously for IE only) //the this argument for the handler is the ActiveX object. function registerAXEvent(control, name, handler) { control = jQuery(control); //can't use closures through the string due to the parameter renaming done by the JavaScript compressor //can't use jQuery.data() on ActiveX objects because it uses expando properties var id = control[0].id; var axe = registerAXEvent.axevents = registerAXEvent.axevents || {}; axe[id] = axe[id] || {}; axe[id][name] = handler; var script = "(function(){"+ "var f=registerAXEvent.axevents['" + id + "']['" + name + "'],e=jQuery('#" + id + "');"+ "function document." + id + "::" + name + "(){"+ "f.apply(e,arguments);"+ "}"+ "})();"; eval(script); } 

यह कोड आपको क्लोजर का उपयोग करने की अनुमति देता है और eval के दायरे को कम करता है ()।

ActiveX नियंत्रण का <object> तत्व पहले से ही दस्तावेज में जोड़ दिया जाना चाहिए; अन्यथा, IE तत्व नहीं मिलेगा और आपको केवल स्क्रिप्ट त्रुटियां मिलेंगी।

मुझे लगता है कि MyControl :: ReceiveMessage उदाहरण काम नहीं करता है क्योंकि ActiveX नियंत्रण भिन्न नाम से या किसी अन्य दायरे में सामने आ रहा है।

GetControl :: ReceiveMessage उदाहरण के साथ, मुझे विश्वास है कि GetControl संदर्भ सेट होने से पहले फ़ंक्शन परिभाषा को पार्स किया जा रहा है, इस प्रकार यह एक वैध ऑब्जेक्ट का उल्लेख नहीं करता है और फ़ंक्शन को ऑब्जेक्ट में बाँध नहीं सकता।

मैं इस समस्या को एमएस स्क्रिप्ट डीबगर का उपयोग करके और यह निर्धारित करने की कोशिश कर रहा हूं कि नियंत्रण के लिए एक डिफ़ॉल्ट संदर्भ भिन्न नाम के साथ या एक भिन्न गुंजाइश (संभवतया फार्म का एक बच्चा) के रूप में मौजूद है। यदि आप नियंत्रण के लिए सही संदर्भ का निर्धारण कर सकते हैं, तो आप इस कार्य को Automagic :: विधि के साथ बाध्य करने में सक्षम होना चाहिए जो कि MSDN लेख निर्दिष्ट करता है।

एक और सोचा, संदर्भ वस्तु के नाम पर आधारित हो सकता है और आईडी नहीं, इसलिए दोनों को स्थापित करने का प्रयास करें 🙂