Rufus272 > 18-11-2011 10:54:15 |
Уважаемые форумчане, не уверен, что создал тему в правильном разделе, но у меня беда( Помогите пожалуйста. Пишу свой маленький браузер используя Skybound.Gecko. Пишу на C# Мне нужно отменить окно загрузки файлов. Допустим, я гуляю по сайту и вижу ссылку на скачивание какого-то файла (Не важно, отдается файл через PHP или прямая ссылка), после нажатия на нее у меня появляется окно, в котором нахвание файла и две кнопки "Save" и "Cancel". Так вот, как мне отменить это окно програмно? Чтоб при нажатии или переходы на аналогичные ссылки окно не появлялось вообще, ну и естественно файл не сохранялся... Помогите, очень надо! |
okkamas_knife > 18-11-2011 15:00:45 |
Rufus272 при клике на сыылу отправляется соответствующий запрос потом с сервера приходит ответ и если его Content-Type не совпадает с тем что может быть отображён то браузер предлагает его сохранить соответственно ищи в коде где это обрабатывается(заголовок ответа сервера) и сделай вместо выдачи запроса на сохранение игнорирование. |
Rufus272 > 18-11-2011 19:02:42 |
Как сделать на сохранение игнорирование? Что это за окно? Что это за событие? Какой метод дергается? Ничего не понятно( |
okkamas_knife > 18-11-2011 19:14:22 |
Rufus272 А вы кодер или кто? неужели тяжело взять исходники и поискать там по упоминанию Content-Type кусок отвечающий за обработку приходящего заголовка и соответствеено посмотрев что и куда идёт при разных Content-Type поставить в нужном месте заглушку? |
Rufus272 > 18-11-2011 20:23:46 |
В том то и дело, что все перелазил что только мог... |
Rufus272 > 20-11-2011 00:29:48 |
Если кто поможет то я готов немного заплатить. |
hydrolizer > 20-11-2011 07:17:55 |
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. Таким способом нельзя перехватить попытку обращения по ссылке к файлу, расположенному локально. И обойти этот момент как-то иначе способов пока нет. |