2012-02-23 3 views
-1

Имейте уникальный запрос клиента, который я не уверен, как бороться.C# Перехват кнопки обзора

У клиента есть форма веб-страницы с кнопкой обзора, чтобы выбрать файл. Когда нажимается кнопка обзора, вместо отображения локальных файлов они хотят всплывать окно с текстовым полем для ввода кода. Этот код затем используется для выбора файла из локальной папки, содержащей 1000 файлов, каждый со своим собственным кодом. Они хотят запретить пользователю просматривать другие файлы в этой папке.

Я написал пользовательскую форму Windows, чтобы имитировать форму веб-страницы, но у них уже есть веб-страница в Интернете и она хотела бы ее повторно использовать.

Любые идеи, как перехватить кнопку обзора? Я могу использовать приложение C# с компонентом веб-браузера, но может ли он перехватить кнопку обзора?

+5

У вас есть гвоздь. Вы спрашиваете: «Как прикрутить этот гвоздь?» Ответ: не используйте гвоздь, используйте винт. – asawyer

+0

Также - Как именно эта схема остановит людей от простого набора случайных кодов, пока они не попадут в файл, они также не должны иметь доступ? – asawyer

+0

Файлы находятся на компьютере пользователя? Вы понимаете, что пользователь может просматривать эти файлы в любом случае до тех пор, пока они находятся на его компьютере? –

ответ

0

Не показывать фактический файловый браузер, имитируют один, который показывает только то, что один файл в.

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

+0

, как бы вы не отображали фактический браузер файлов? Имейте в виду, что это фактическая веб-страница, загруженная с сервера, а не веб-страница, загруженная с локального компьютера. – Christian

1

Единственный вариант, с которым я могу работать, - использовать приложение C# с компонентом веб-браузера. Затем вы можете использовать WebBrowser.ObjectForScripting предоставить метод, который может быть вызван, чтобы вызвать ваше пользовательское окно сборщика через Javscript, например:

window.external.ShowPickerWindow(); 

то у вас есть два варианта:

  1. Опросить DOM страницы один раз он загружается и заменяет кнопку тем, что запускает ваше окно выбора.
  2. Попросите клиента изменить свою страницу, чтобы он проверил наличие метода window.external.ShowPickerWindow и в основном использовал для вас вариант (1).

Возможно, у вас есть способ, возможно, названный window.external.GetPickedCode(), чтобы вытащить код на странице.

1

Rob kinder управлял мной по правильному мышлению, говоря «замените кнопку», которая привела меня к решению, которое прекрасно работает!

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

private void wb_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
    { 
     HtmlElement btnBrowse = wb.Document.GetElementById("fiPhoto"); 
     if (btnBrowse != null) 
     { 
      HtmlElement newbtn = wb.Document.CreateElement("input"); 
      newbtn.SetAttribute("id", "btnLoad"); 
      newbtn.SetAttribute("type", "button"); 
      newbtn.SetAttribute("value", "Load"); 
      newbtn.Click += new HtmlElementEventHandler(newbtn_Click); 
      btnBrowse.Parent.AppendChild(newbtn); 

      btnBrowse.Style = "display:none"; 
     } 

     HtmlElementCollection forms = wb.Document.Forms; 
     if (forms.Count > 0) 
     { 
      HtmlElement form = wb.Document.Forms[0]; 
      form.AttachEventHandler("onsubmit", delegate(object o, EventArgs arg) 
       { 
        FormToMultipartPostData postData = new FormToMultipartPostData(wb, form); 
        postData.AddFile("photo", photo); 
        postData.Submit(); 
       }); 
     } 
    } 

    private void newbtn_Click(object sender, EventArgs e) 
    { 
     Form2 frm = new Form2(this); 
     frm.ShowDialog(); 
    } 

FormToMultipartPostData слишком большой, чтобы размещать здесь, но это в основном вручную конструирует Content-Disposition быть размещены

+0

Фантастический, я рад, что вы его работали. – asawyer

Смежные вопросы