سؤال

أنا مشغول في كتابة BHO (كائن مساعد المتصفح) في C # وأحتاج إلى إرفاق معالجات الأحداث لجميع الأحداث OnClick على عناصر الإدخال. أنا لا أستخدم WebBrowser المدمج الذي يوفره Visual Studio، بدلا من ذلك تشغيل مثيل جديد من Internet Explorer المثبت على الكمبيوتر الشخصي للعملاء. تأتي المشكلة عند استخدام إصدارات مختلفة من IE.

في IE7 و IE8 أستطيع أن أفعل ذلك مثل هذا:

public void attachEventHandler(HTMLDocument doc)
{
  IHTMLElementCollection els = doc.all;
  foreach (IHTMLElement el in els)
  {
    if(el.tagName == "INPUT")
    {
      HTMLInputElementClass inputElement = el as HTMLInputElementClass;
      if (inputElement.IHTMLInputElement_type != "text" && InputElement.IHTMLInputElement_type != "password")
      {
        inputElement.HTMLButtonElementEvents_Event_onclick += new HTMLButtonElementEvents_onclickEventHandler(buttonElement_HTMLButtonElementEvents_Event_onclick);
      }
    }
  }
}

هذا يعمل بشكل مثالي، الشيء، IE6 يلقي خطأ عند الصب على htmlinputelementClass، لذلك أنت مجبر على الإدلاء على تطهيرها

public void attachEventHandler(HTMLDocument doc)
{
  IHTMLElementCollection els = doc.all;
  foreach (IHTMLElement el in els)
  {
    if(el.tagName == "INPUT")
    {
      DispHTMLInputElement inputElement = el as DispHTMLInputElement;
      if (inputElement.type != "text" && inputElement.type != "password")
      {
        //attach onclick event handler here
      }
    }
  }
}

المشكلة هي أنه لا أستطيع أن أجد طريقة لإرفاق الحدث إلى كائن Disphtmlinputelement. أيه أفكار؟

هل كانت مفيدة؟

المحلول

لذلك اتضح أنه بمجرد أن يلقي من نظام System_Comobject إلى كائن Disphtmlinputelement يمكنك التفاعل مع واجهة MSHTML. [الأحداث] واجهة. لذلك سيكون رمز إضافة معالج حدث ل IE6:

public void attachEventHandler(HTMLDocument doc)
{
  IHTMLElementCollection els = doc.all;
  foreach (IHTMLElement el in els)
  {
    if(el.tagName == "INPUT")
    {
      DispHTMLInputElement inputElement = el as DispHTMLInputElement;
      if (inputElement.type != "text" && inputElement.type != "password")
      {
        HTMLButtonElementEvents_Event htmlButtonEvent = inputElement as HTMLButtonElementEvents_Event;
        htmlButtonEvent.onclick += new HTMLButtonElementEvents_onclickEventHandler(buttonElement_HTMLButtonElementEvents_Event_onclick);
      }
    }
  }
 }

ومع ذلك، يمكنك واجهات مباشرة في معالج الأحداث، لكنني أردت استبعاد بعض أنواع مثل Passwaord وحقول النص، لذلك اضطررت إلى إلقاء الضوء على تطهيرها

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top