@IT会議室 新規書き込み停止(2012年10月9日)のお知らせ

@ITの会員制度「@ITクラブ・メンバーシップ」(@ITクラブ)は、10月9日より、弊社が運営するメディアの共通会員制度である「アイティメディアID」へ移行することになりました。これに伴い、@ITクラブのサービスの一部を変更させていただきます。

@IT会議室については、2012年10月9日をもって新規書き込みを終了いたしました(閲覧は引き続き可能です)。今後、質問や回答などは「QA@IT」(http://qa.atmarkit.co.jp/)をご利用くださいますよう、お願い申し上げます。

input type="file"初期値設定


クロスポ

2009-11-11 21:33


はじめまして。質問させてください。

htmlで次のようなファイル指定のコントロールに初期値を設定すること
はできないのでしょうか。

<input type="file" value="" name="fileName">

IE6環境でかまいません。

ActiveXで、色々試してみましたが、エラーではじかれてしまいます。
ちなみに、<input type="text"・・・>ではもちろんできます。

MSHTML::IHTMLDocument3Ptr pDocument( pBrowser->Document );
MSHTML::IHTMLElementCollectionPtr pCollection;

// 検索文字列を設定
pCollection = pDocument->getElementsByName( _bstr_t( L"fileName" ) );
MSHTML::IHTMLInputTextElementPtr pText( pCollection->item() );

①文字列を貼り付け
pText->value = _bstr_t( L"C:\\" );

②コントロールの貼り付け

pText->select();
keybd_event(VK_CONTROL, 0, 0, 0);
keybd_event('V', 0, 0, 0);
keybd_event('V', 0, KEYEVENTF_KEYUP, 0);
keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);

アイデアでもいいですし、対応案ありましたら、
よろしくお願いします。

コメント

2009-11-11 23:41

これには私も興味がありますが、少なくともIE7以下についてはこの掲示板を見てきた限り、できないと思います。(IE8は使ったことがないので分かりません。)

ただ、
pText->select();
keybd_event(VK_CONTROL, 0, 0, 0);
keybd_event('V', 0, 0, 0);
keybd_event('V', 0, KEYEVENTF_KEYUP, 0);
keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
のやりかたなら、いくらなんでもキーボードのイベントを送っているのならば、できても良さそうな気もしますが、もしかしたら pText->select(); の段階で失敗しているのかな、とも思います。私だったら最初にフォーカスの移動だけ手動でやってみることを試してみます。でも、それでももしかしたらなにかIEに制限がかかっていてダメなこともあるのかもしれません。

ただ、ここまでやるんでしたら、自前のプログラムでファイルアップロードの処理を書いてしまったほうが手っ取り早いと思います。主観もありますが、キーボードのイベントをブラウザーに送るのは、私だったら避けます。

2009-11-12 00:10

私もこれであれば、できるような気がするのですが。。
やはりセキュリティの問題で難しいのですかね。。

pText->select();
keybd_event(VK_CONTROL, 0, 0, 0);
keybd_event('V', 0, 0, 0);
keybd_event('V', 0, KEYEVENTF_KEYUP, 0);
keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);

2009-11-12 11:25

過去
inputObj#click() を利用しファイルダイアログの呼び出しのみをjavascriptで組んだ結果。
セキュア違反で送信不可だった