none
Как в WebBrowser перехватить диалог сохранения файлов? RRS feed

  • Вопрос

  • Когда по ссылке находится файл для загрузки то вылетает диалог ожидающий реакции пользователя? Как его перехватить/отменить?
    2 декабря 2011 г. 8:39

Все ответы

  • > Когда по ссылке находится файл для загрузки то вылетает диалог ожидающий реакции пользователя? Как его перехватить/отменить?

     

    var wb = new WebBrowser();
    wb.Navigating += (s, e) =>
    {
        // послать HEAD запрос. сервер вернет тип контента. 
        // если не подходит, то прервать загрузку
        e.Cancel = true;
    };
    wb.Navigate(url);
    


    другой вариант: подключить к WebBrowser объект, контролирующий UI
    см. The most complete C# Webbrowser wrapper control

     

    2 декабря 2011 г. 9:19
  • Уважаемый пользователь!

    В вашей теме отсутствует активность в течение последних 5 дней. При отсутствии каких-либо действий в течение 2 последующих дней, тема будет переведена в разряд обсуждений. Вы можете возобновить дискуссию, просто оставив сообщение в данной теме


    Для связи [mail]
    19 декабря 2011 г. 5:42
  • Судя по всему нужно реализовывать IDownloadManager, но примеров "маловато".

    Дмитрий, вопрос не по теме. Чем плохо наличие вопросов без ответов? Ведь перевести в обсуждения впринципе значит похоронить... Или у на этом форме есть ответы на все вопросы мироздания? Просто в другом обсуждении я не сдержался и  поднимал тему совка.

    На этом форме не должно быть вопросов без ответов?

    21 декабря 2011 г. 13:11
  • В программировании на все есть ответы и в частности ответ "реализовать невозможно или предельно проблематично". Поэтому тема без ответа говорит об отсутствии легкого решения, а сложные решения находятся по средствам обсуждения. В конце концов - не нравятся правило форума, не пользуйтесь.
    Влюблен в WPF Не пишу на C#
    21 декабря 2011 г. 17:38
    Отвечающий
  • Плюс к вышесказанному, ваш вопрос поднимается вверх и вероятность ответа на него возрастает.

    По вопросу - вы можете рассказать в целом задачу над которой вы работаете, может вам вообще не нужен компонент WebBrowser, раз вы все пытаетесь в нем автомазитизорать.

    Из ответа Malobukv, при клике на ссылку событие Navigating у вас разве не срабатывает?


    Для связи [mail]
    23 декабря 2011 г. 9:08
  • Какие события успевают сраатывать я уже не помню, но точно помню что по ссылке зачастю невозможно понять что будет скачивание файла, так как он генерируется скриптом, а тип его передается через MIME вот браузер и вываливает диалог сохранения, но я про это узнаю уже слишком поздно чтоб отказатья .
    26 декабря 2011 г. 19:46
  • В программировании на все есть ответы и в частности ответ "реализовать невозможно или предельно проблематично". Поэтому тема без ответа говорит об отсутствии легкого решения, а сложные решения находятся по средствам обсуждения. В конце концов - не нравятся правило форума, не пользуйтесь.
    Влюблен в WPF Не пишу на C#


    Я просто не видел такого правила формуа что вопрос должен быть либо помечен как ответ либо перемещен в обсуждения, поэтому я и спросил про вопросы без ответов. А вот правило не выражать эмоции и проявлять терпение существует во всех форумах, и ваше выссказывание " конце концов - не нравятся правило форума, не пользуйтесь" вполне может оказаться высказыванием не по теме и без сдержанности.

    А форум мне нравится, да и альтернатив на данный момент я вообще не нашел.

    27 декабря 2011 г. 12:30
  • Высказывание вполне по теме без грубости и оскорбления - это обычная констатация фактов. Например мне не нравится C# и я им не пользуюсь.

    Что же по теме, то вы можете более подробнее рассказать задачу. Например Дмитрий предложил работать со страницами не через WebBrowser а программно, что существенно увеличит контроль с вашей стороны, но усложнит если вам нужно классическое поведение как у браузера, только без возможности закачки файлов.


    Влюблен в WPF Не пишу на C#
    27 декабря 2011 г. 14:20
    Отвечающий
  • К сожалению мне нужен функционал браузера в частности тот же javaScript, а вот поддержка его в своем приложении я так понял задача не тривиальная да и в WebBrowser за стандартами и изменениями пусть следит Microsoft, а не я.

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

    Но компьютер ведь создан для выполнения повторяющихся рутинных операций:) Еще чем удобен WebBrowser в каком бы месте не возникла ошибка, а могу продолжить работу по старинке вручную в IE, но хотелось бы количество этих вручную уменьшить до нуля.

    А на данный момент: saveAs, securityWindow при неподписанном https и различные JavaScript Alert окна мешают мне работать меньше, а учить больше:)

    27 декабря 2011 г. 15:05
  • Решил пойти неверным, но решающим на данном этапе путем:

    В функции ожидания завершения загрузки страницы так же делать проверку на всплывшие окна диалогов сохранения файла, но импорт GetTopWindow, GetActiveWindow, ничего не дал вернее он не выдает искомое окно, при этом GetForegroundWindow работает на ура, но у меня идеология что я постоянно не наблюдаю за программой и она всплывает только если требует моего решения, а GetForegroundWindow работает для любого активного окна ос, не обязательно текущего процесса.

    Как мне найти это самое окно "сохранение файла"? Сейчас комаю в сторону EnumThreadWindows, но как-то все натянуто за уши выглядит. Как я могу получить хендл всплывшего диалога?

     

    3 января 2012 г. 13:03
  • Было бы очень полезно, если вы приведете пример страницы, на которой возникает данная проблема.

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

    В Navigating, определяйте тип загружаемого контента - должно получиться:

    System.Net.WebRequest request = System.Net.WebRequest.Create(e.Url);
    
    // we need only header part of http response
    request.Method = "HEAD";
    
    System.Net.WebResponse response = request.GetResponse();
    
    // only text/html, text/xml, text/plain are allowed... extend as required
    if (!response.ContentType.StartsWith("text/"))
    {
      e.Cancel = true;
      MessageBox.Show("Not allowed for security resons...");
    }
    

     


    Для связи [mail]
    10 января 2012 г. 16:32
  • Было бы очень полезно, если вы приведете пример страницы, на которой возникает данная проблема.

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

    В Navigating, определяйте тип загружаемого контента - должно получиться:

    System.Net.WebRequest request = System.Net.WebRequest.Create(e.Url);
    
    // we need only header part of http response
    request.Method = "HEAD";
    
    System.Net.WebResponse response = request.GetResponse();
    
    // only text/html, text/xml, text/plain are allowed... extend as required
    if (!response.ContentType.StartsWith("text/"))
    {
      e.Cancel = true;
      MessageBox.Show("Not allowed for security resons...");
    }
    

     


    Для связи [mail]


    С Head есть проблеммы это кукис вернее они решаются для одного двух выборочных примеров, но для универсального их как-тго получается надо извлекать из WebBrowser и передавать в WebRequest.

    Пример странички я привести прямойц не смогу сайт корпоративный и не доступен из вне. Navigating я и так перехватываю и фильтрую переходы по расширениям, теперь проблеммы только с сылками для скачивания в формате аналогичном как у сетевых файлообменников где ссылка генерируется прямо на лету и не содержит в себе расширения, но проблемма и в том что ссылка "одноразовая" и HEAD запрос этот раз и использует...

    16 января 2012 г. 10:35