WebBrowserコントロール内のをC#から設定したい

投稿者: Anonymous

ウェブブラウザを開き、ローカルファイルを設定参照できるinput-type=”file”に自動で設定させるやり方がわかりません。
通常どおりにやると、できないのでThread操作が必要ですが、難しいので既存のクラスを使っています。
http://www.codeproject.com/Articles/28917/Setting-a-file-to-upload-inside-the-WebBrowser-com
が、クリックしても参照設定されません。

    private void button1_Click(object sender, EventArgs e)
    {
        HtmlElement form = webBrowser1.Document.Forms[0];
        form.AttachEventHandler("onsubmit", delegate (object o, EventArgs arg)
        {
            FormToMultipartPostData postData =
                new FormToMultipartPostData(webBrowser1, form);
            postData.SetFile("file", @"C:UsersShimizuVideosFDa.mp4");
            postData.Submit();
        });
    }

解決

スクリプト等で input[type=file] にローカルファイルを設定することはできません。でなければ、個人情報等を含んだファイルをユーザーの確認なしにアップロードできてしまいますよね?

また、 WebBrowser クラスを通してアクセスできる HtmlElement 等は Javascript からアクセスできる DOM オブジェクトそのものです。故に、 Javascript と同程度の操作しか行えません。

質問に挙げられたサイトでも、プログラムから変更することはできないと書かれています。

As you probably know, for security reasons, it is not possible to change the value of the HTML form file input programmatically.

その上で、input[type=file] を設定するのは諦めて、そうすることなしに任意のファイルをアップロードするのが、あなたの引用されたサンプルコードです。

しいて言えば、参照ダイアログを表示させて、そのダイアログをプログラムから制御することはできるかもしれません。(私は試していません)

参考 IE8でのINPUT TYPE=”FILE”フィールドに値をセットする

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *