كيفية معرفة "نوع" المستند الذي يتم عرضه في IE

StackOverflow https://stackoverflow.com/questions/823182

  •  05-07-2019
  •  | 
  •  

سؤال

أنا أستخدم c# لإنشاء زر لـ IE ويقوم هذا الزر بتنفيذ إجراءات معينة تعتمد جميعها على كون المستند مستند PDF.أحاول إعداد حارس لمنع حدوث أي إجراء إذا كان نوع المستند ليس ملف PDF ولكني لست متأكدًا من كيفية قيام IE بتسليم المستند إلى Adobe ويتولى القارئ المسؤولية.أنا أستخدم كلاً من SHDocWv وقد نظرت إلى كائنات WebBrowserClass ولست متأكدًا من كيفية اكتشاف ذلك.أي اقتراحات؟

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

المحلول

من الصعب بعض الشيء القيام بهذا AFAIK.

قيمة ال IWebBrowser2::النوع تعتمد الخاصية على المكون الإضافي الذي قمت بتثبيته والذي يتعامل مع ملفات PDF، لأن بعض المكونات الإضافية تنشئ غلاف HTML لملف PDF (مثل Adobe) بحيث تحصل على "مستند HTML" كنوع وبعض المكونات الإضافية لا تفعل ذلك (مثل Foxit)، لذلك لا يمكنك الاعتماد على هذا حصريًا.

لذا، إذا حصلت على ملف PDF مع غلاف HTML، يمكنك استخدامه IHTMLDocument2::mimeType لمعرفة النوع الدقيق للمستند (JPEG/GIF/PNG/etc.يتم تغليف جميع الملفات بتنسيق HTML بواسطة المتصفح).ولكن كما أعلم أنها غير موثوقة أيضًا، على سبيل المثال على جهازي تقوم بإرجاع "مستند Firefox" لمستندات HTML لأن ملفات .html مرتبطة بـ Firefox :s لكنني لم أختبر لمعرفة ما إذا كان هذا هو الحال مع ملفات PDF أيضًا.

خيار آخر هو الاستخدام GetUrlCacheEntryInfoEx استدعاء API للحصول على الملف في ذاكرة التخزين المؤقت للمتصفح المحلي الذي يخزن المستند، ثم قراءته (بداية الملف فقط، أعتقد أن أول 256 بايت فقط مهمة) والاتصال FindMimeFromData مع البيانات التي قرأتها للتو وسيُرجع نوع mime.

نصائح أخرى

وتحقق نوع التمثيل الصامت وثيقة أو رؤية window.location.href من webbrowser ... إذا كان يتم عرض قوات الدفاع الشعبي، هل ستكون قادرة على العثور عليه ...

وآخر وسيلة جيدة هو أن تفعل ما يلي ..

1] المصبوب كائن المستند إلى IPersist ثم استخراج CLSID باستخدام .GetClassID (..). 2] pInvoke ProgIDFromCLSID لاستخراج معرف البرنامج 3] تطابق معرف البرنامج ضد الأجسام / تطبيقات COM المعروفة.

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