Уважаемые форумчане, не уверен, что создал тему в правильном разделе, но у меня беда( Помогите пожалуйста.
Пишу свой маленький браузер используя Skybound.Gecko. Пишу на C#
Мне нужно отменить окно загрузки файлов.
Допустим, я гуляю по сайту и вижу ссылку на скачивание какого-то файла (Не важно, отдается файл через PHP или прямая ссылка), после нажатия на нее у меня появляется окно, в котором нахвание файла и две кнопки "Save" и "Cancel". Так вот, как мне отменить это окно програмно? Чтоб при нажатии или переходы на аналогичные ссылки окно не появлялось вообще, ну и естественно файл не сохранялся...
Помогите, очень надо!
Отсутствует
Rufus272
при клике на сыылу отправляется соответствующий запрос потом с сервера приходит ответ и если его Content-Type
не совпадает с тем что может быть отображён то браузер предлагает его сохранить
соответственно ищи в коде где это обрабатывается(заголовок ответа сервера) и сделай вместо выдачи запроса на сохранение игнорирование.
я помню те времена когда обновления программ убирали проблемы и исправляли баги, а не добавляли их.
toxID:05AB9B827D896AACEE7FF4573A02FB8F025F46ADC856B98F65BC1BA9BD21A81DC98BA9C36CE3
Отсутствует
Rufus272
А вы кодер или кто?
неужели тяжело взять исходники и поискать там по упоминанию Content-Type
кусок отвечающий за обработку приходящего заголовка и соответствеено посмотрев что и куда идёт при разных Content-Type
поставить в нужном месте заглушку?
я помню те времена когда обновления программ убирали проблемы и исправляли баги, а не добавляли их.
toxID:05AB9B827D896AACEE7FF4573A02FB8F025F46ADC856B98F65BC1BA9BD21A81DC98BA9C36CE3
Отсутствует
Rufus272
Вот здесь автор темы спрашивает, как ему перехватить запрос, и запретить его, если у него URL не входит в некий список. Я думаю, вам нужно сделать почти аналогично - свою реализацию nsIObserver подписать на сообщение http-on-examine-response, а в обработчике сообщения приводить aSubject не к nsIRequest, а к nsIChannel, и у полученного экземпляра проверять свойство contentType - если его значение соответствует файловому содержимому (например, равно application/octet-stream) - то вы вызываете на экземпляре nsIChannel метод cancel (nsIChannel.cancel унаследован от nsIRequest).
Важный момент: подписываться нужно именно на http-on-examine-response, а не на http-on-modify-request, т.к. при обработке последнего попытка получить contentType у экземпляра nsIChannel выбросит исключение NS_ERROR_NOT_AVAILABLE.
Ну, и стоит помнить, что файловому содержимому соответствуют разные contentType - например, application/x-xpinstall соответствует xpi-файлам.
P.S. Таким способом нельзя перехватить попытку обращения по ссылке к файлу, расположенному локально. И обойти этот момент как-то иначе способов пока нет.
Отредактировано hydrolizer (20-11-2011 07:26:19)
Отсутствует