Как получить URL, для которого запускается событие downloadBegin ()? - PullRequest
6 голосов
/ 20 ноября 2010

Я пытаюсь создать собственный веб-браузер на основе элемента управления веб-браузера WPF. Я реализовал интерфейс IWebBrowser2 com и реализовал обработчики для событий Navigating(), NavigatedTo() и LoadCompleted(). Но эти обратные вызовы событий запускаются только один раз для страницы верхнего уровня. Теперь предположим, что на странице есть некоторый java-скрипт, CSS и файлы изображений; браузер выдает отдельные HTTP-запросы для загрузки этих файлов. Мы хотели бы захватить отдельные события HTTP-запроса. Например, если структура HTML-страницы равна

<html>
  <body>
    <img src="img1.bmp"/>
    <imp src="img2.bmp"/>
  </body>  
</html>

Я хотел бы записать отдельные времена загрузки для img1.bmp и img2.bmp. Может ли кто-нибудь предложить способ достижения этого?

В то же время я обнаружил, что событие downloadbegin (), равное DWebBrowserEvents_Event, запускается для этих запросов на изображение и т. Д., Но я не могу получить URL-адрес, с которого оно загружается, поскольку обработчик принимает void в качестве параметра.

Так есть ли какой-нибудь способ, которым я могу получить соответствующий URL, потому что есть событие, которое является downloadComplete, которое запускается, когда загрузка завершена. Таким образом, я могу достичь этого.

Но мне нужно решить указанное выше время рендеринга изображения. Я застрял плохо Пожалуйста, помогите мне ....

1 Ответ

0 голосов
/ 27 декабря 2012

У меня нет глубоких знаний об этих классах, но я немного почитал. в mdsn говорят о событии downloadbegin (): http://msdn.microsoft.com/en-us/library/cc136556(v=vs.85).aspx

Это событие вызывается вскоре после события DWebBrowserEvents :: BeforeNavigate или DWebBrowserEvents2 :: BeforeNavigate2, если навигация не отменена. Любая анимация или «занятое» указание, которое должен отображать контейнер, должно быть связано с этим событием.

и когда я проверил BeforeNavigate, я увидел, что у него есть url в его параметрах, я нашел это (не msdn, но вполне логично, что у него будет URL) http://blog.yezhucn.com/progie/222647_beforenavigate.htm

void BeforeNavigate (
IDispatch * pDisp, VARIANT * & url, ВАРИАНТ * & Флаги, VARIANT * & TargetFrameName, VARIANT * & PostData, ВАРИАНТ * & Заголовки, VARIANT_BOOL * & Отмена );

поэтому, если у вас всегда будет событие BeforeNavigate, вы можете использовать его URL и проверить следующее событие завершения загрузки, связанное с событием DownloadBegin. Я предполагаю, что для каждой загрузки он создает событие BeforeNavigate, но я не знаю, потому что я не могу попробовать (нет кода, чтобы проверить это), но я надеюсь, что это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...