QA@IT
この質問・回答は、@IT会議室からインポートされたものです。

input type="file"初期値設定

0 PV

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

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);

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

投稿者: クロスポ

回答

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

投稿者: 杏樹

編集 履歴 (0)

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

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);

投稿者: クロスポ

編集 履歴 (0)

これには私も興味がありますが、少なくとも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に制限がかかっていてダメなこともあるのかもしれません。

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

投稿者: unibon

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。