Обработка файлов PDF на специальных веб-сайтах с помощью функции «быстрого просмотра» с помощью CEFSharp - PullRequest
0 голосов
/ 28 марта 2019

В CEFsharp я хочу иметь возможность либо разрешить плагину PDF отображать PDF, либо загрузить файл и показать его с установленной на ПК программой PDF по умолчанию.

Для отображения по умолчаниюПрограмма PDF Я использую команду CefCommandLineArgs.Add("disable-pdf-extension", "1") и реализую интерфейс загрузчика.Чтобы показать PDF-файлы в плагине, я не устанавливаю команду CefCommandLineArgs.Add("disable-pdf-extension", "1"), которая, в свою очередь, означает, что обработчик загрузки не вызывается.

Существует веб-сайт, который имеет какую-то функцию быстрого просмотра файлов.Это означает, что у него есть панель, в которой он показывает файл.Проблема в том, что при CefCommandLineArgs.Add("disable-pdf-extension", "1") панель веб-сайтов остается пустой, а файл PDF загружается через обработчик загрузок.

Я уже могу сказать, что OnBeforeBrowse (через URL), веб-сайт пытается показатьpdf на панели и, конечно, см. тип MIME в OnBeforeResourceLoad и OnResourceResponse.

Мой вопрос: как мне заставить мой браузер использовать плагин по умолчанию в этом случае?

Решение, которое я могу придумать, - не устанавливать CefCommandLineArgs.Add("disable-pdf-extension", "1"), что позволяет этой специальной функции быстрого просмотра работать.Однако если я хочу, чтобы все другие PDF-файлы отображались в программе PDF по умолчанию, мне нужно перехватить загрузку PDF-файла (например, в OnBeforeBrowse) и загрузить его с помощью других сборок .NET, таких как HTTPWebRequest.Проблема с этим методом заключается в том, что мне нужно собирать и отправлять куки, и это похоже на взлом, который не будет длиться долго, если веб-сайт изменится.

1 Ответ

0 голосов
/ 04 апреля 2019

Я считаю, что это очень уникальная ситуация, однако я объясню свой опыт.Хотя это, вероятно, также проблема веб-сайта, она может помочь вам с вашим кодом CefSharp.

  1. Я не отключил просмотрщик PDF.Это означает, что все PDF-файлы будут отображаться в окне браузера.
  2. Если я хочу, чтобы мой PDF-файл автоматически открывался в приложении PDF по умолчанию, я проверяю объекты ответа MIMEType типа "application / pdf" в * 1006.* Метод OnResourceResponse .
  3. Затем я вызываю StartDownload по URL-адресу, который предоставил ответ.

Tinkering - обнаруженные проблемы Запуск загрузки открылсовершенно новый набор вопросов.Во-первых, новые запросы и ответы создаются после вызова startdownload, что означает, что вы можете застрять в цикле постоянной загрузки одного и того же файла.В моем случае все PDF-файлы создаются с помощью всплывающего окна, поэтому в LifeSpanHandler я создаю новый ChromiumBrowser, и в этом недавно созданном браузере у меня был IRequestHandler для ожидания MIMEType, как указано в пункте 2 выше.Затем я вызвал startDownload на IBrowser моего основного браузера.Это означало, что фактическая загрузка будет происходить в главном браузере и другом экземпляре RequestHandler.

Я также видел много примеров, когда люди просто проверяют наличие «.pdf» в URL в событии BeforeBrowse, а затемзагрузить файл, при этом можно также отменить просмотр.Я не мог этого сделать, так как на сайте даже не было PDF в URL.Первый раз, когда я мог сказать, что содержание было в Ответе.Одна вещь, которую я не достиг, - это как отменить что-то на этом этапеЗдесь, в StackOverflow, есть вопрос (который сейчас не может быть найден), в котором обсуждается установка URL-адреса на "" (без строки) или на поддельный домен.Я не проверял это и понятия не имею, экономит ли это время.

...