جافا سكريبت يتلقى الحدث اكتف مرة واحدة فقط
-
06-07-2019 - |
سؤال
ولقد كتبت عنصر تحكم ActiveX باستخدام ATL. لقد استخدمت المعالج لإضافة دعم لنقاط الاتصال التي أضافت public IConnectionPointContainerImpl<CActiveX>
وCProxy_IActiveXEvents<CActiveX>
، حيث CProxy_...
غير المعالج إنشاء التعليمات البرمجية إطلاق الأحداث.
ولقد تعريف dispinterface كما يلي:
<اقتباس فقرة>و[ UUID (43ECB3DF-F004-4FAD-9BFB-79211A693C3A)، helpstring ( "أحداث اكتف") ] _IActiveXEvents dispinterface { الخصائص: طرق: [معرف (1)] receiveCertificate الفراغ ([في] VARIANT_BOOL isPermissionGranted، [في] BSTR certificateXml)؛ }؛
اقتباس فقرة> ووتضمينه في coclass مع [default,source] dispinterface _IActiveXEvents
. إطلاق الحدث أدعو Fire_receiveCertificate(isGranted, _bstr_t(certXml.c_str()).copy())
، والتي تم تعريفها في المعالج رمز.
ووجافا سكريبت التالية سوف تتلقى الحدث
<اقتباس فقرة>function ActiveXObject::receiveCertificate(permission, certificate) {
alert("alert!");
}
اقتباس فقرة>
والمشكلة هي أنه لا تتلقى سوى حالة واحدة، وليس لدي لإغلاق وإعادة فتح IE للحصول عليه لاستقبال الحدث مرة أخرى. أنا شيء مفقود؟
المحلول
إذا كان أي شخص مهتم، لقد وجدت الحل لهذه المشكلة. أنا سجلت الكائن في ROT (تشغيل كائن جدول)، ولكن لم يكن إلغاء أية تسجيلات موجودة سابقا. وهكذا، تم تسجيل عدة تظهر. مرة واحدة ضمان I إلغاء التسجيلات السابقة، أطلقت الأحداث بشكل موثوق.