Кнопка обзора перехвата C # - PullRequest
0 голосов
/ 23 февраля 2012

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

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

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

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

Ответы [ 3 ]

1 голос
/ 23 февраля 2012

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

window.external.ShowPickerWindow();

У вас есть две опции:

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

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

1 голос
/ 23 февраля 2012

Роб Киндер направил меня по правильному пути мышления, сказав «замени кнопку», которая привела меня к решению, которое прекрасно работает!

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

    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 голосов
/ 23 февраля 2012

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

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

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