input type=fileで、javascriptからファイル選択ダイアログを出す方法って

こんばんわ、地獄の5丁目に突入したお爺さんです。
土曜日から、Ajaxでファイルをアップロードするコンポーネントを作っていたのですが、手詰まりになりました。
どこで詰まったかといいますと、掲題ん所です。

汎用的なファイルアップロードコンポーネントを目指していたので、アップロードフォームすら表示しない方針で作り始めました。
XMLHTTPRequestではenctype=multipartを作れないので、やはりform要素が必要でしょう。

それで、動きとしては、
 1.DOMでformを作る。
 2.メソッドを呼び出すと、ファイル選択ダイアログが開き、ファイルを選択させる
 3.ファイルが選択されると自動的に透明iframeに対して、submitさせる。
 4.応答は透明iframeの中身をXML解析する
のような形で思い描いていたわけです。
それで、技術的課題の所から解決しはじめて、一番の山?と思われた透明iframe周りが目処が立った!という所で、2番のファイルを選択させる部分にとっかかりました。

要するに、form1の中に、

<input type=file name=file1>

のような要素をdocument.createElementで作ってやってですね、document.form1.file1.click()で、ファイル選択ダイアログを出してやろうと思っていたわけです。
IEでの実績はあったので、楽勝だー!と思っていたら、

FirefoxとOperaでだめでした。。。orz

色々調べた所、みんな同じ所でひっかかっているようですね。。。

Ajax導師に話を伺うと、Flashで同様の事をやっているサイトがあるそうなので、それで確認してみたいのですが、Flash8はローカルファイルのUPが出来るという噂があります。それを使っているかも知れない。
そうなると、Ajaxでファイルをアップロードするコンポーネントはどうやっても、ブラウザが作るファイル選択コンポーネントを表示しないといけなさそうです。

今週末には、結論はでるとは思いますが。。。さて、どーなるんでしょうか。。。

所で、上の話には、もう一つ技術的課題があって、ファイル選択ダイアログでファイルを指定した後、自動的にsubmitする所なんですが、一部(IEという噂)で、onChangeイベントが取れないらしいんですよ。

ホンマか??だとすると、話が根底からくずれそうです。

と、片端からブラウザ依存にぶち当たっていますが、まあ、Ajaxの開発ってこんなモンですかね。

ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 16

なるほど(納得、参考になった、ヘー) なるほど(納得、参考になった、ヘー) なるほど(納得、参考になった、ヘー) なるほど(納得、参考になった、ヘー)
驚いた 驚いた 驚いた 驚いた 驚いた 驚いた 驚いた 驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

この記事へのコメント

この記事へのトラックバック