Как узнать, какой «тип» документа отображается в IE

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

  •  05-07-2019
  •  | 
  •  

Вопрос

я использую С# для создания кнопки для IE, и эта кнопка выполняет определенные действия, которые зависят от того, является ли документ PDF-документом.Я пытаюсь настроить защиту, чтобы предотвратить какие-либо действия, если тип документа не является PDF-файлом, но не знаю, как IE передает документ Adobe, и Reader берет на себя ответственность.Я использую оба SHDocWv, просмотрел объекты WebBrowserClass и не знаю, как это понять.какие-либо предложения?

Это было полезно?

Решение

AFAIK сделать это немного проблематично.

Значение IWebBrowser2::Тип Свойство зависит от того, какой плагин вы установили, который обрабатывает PDF-файлы, поскольку некоторые плагины создают HTML-оболочку для файла PDF (например, Adobe), поэтому вы получаете «HTML Document» в качестве типа, а некоторые плагины этого не делают (например, Foxit), поэтому вы не можете транслировать исключительно это.

Итак, если у вас есть PDF с оболочкой HTML, вы можете использовать IHTMLDocument2::mimeType узнать точный тип документа (JPEG/GIF/PNG/и т.д.все файлы оборачиваются браузером в HTML).Но, насколько я знаю, это также ненадежно, например, на моей машине он возвращает «Документ Firefox» для документов HTML, потому что файлы .html связаны с Firefox: s Но я не проверял, относится ли это также и к PDF-файлам.

Другой вариант - использовать GetUrlCacheEntryInfoEx Вызов API для получения файла в локальном кеше браузера, в котором хранится документ, затем прочтите его (только начало файла, я думаю, важны только первые 256 байтов) и вызовите НайтиMimeFromData с данными, которые вы только что прочитали, и он вернет тип mime.

Другие советы

Проверьте тип mime документа или посмотрите window.location.href веб-браузера ... Если отображается pdf, вы сможете найти его ...

Еще один хороший способ - сделать следующее.

1] Приведите объект Document к IPersist, а затем извлеките CLSID, используя .GetClassID (..). 2] pInvoke ProgIDFromCLSID, чтобы извлечь progId 3] Сопоставьте progID с известными COM-объектами / приложениями.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top