2

内部使用のための Chrome 拡張機能を作成しています。1 つのステップで、ユーザーはファイルをアップロードできます。これは常に同じファイルです。参照ダイアログをスキップして、入力フィールドに適切な値を直接割り当てたいと思います。

このファイルは、プラグイン コードとは別のものです。

これは、Javascript、または Chrome、Firefox 拡張機能の開発で可能ですか?

私が試してみました:

input.val("file://C:/random.txt")

次に、周囲のフォームを送信します。しかし、それはうまくいきませんでした。

4

2 に答える 2

2

目標がサーバーにファイルを送信することである場合、フィールドでファイルを選択しようとする<input>のは間違った方法です。FormDataオブジェクトを直接作成して、を介して送信するXMLHttpRequestことができます。FormData既存のフォームからオブジェクトを作成することもできることに注意してください。これはFirefoxとChromeの両方で機能し、Webページからでも機能します(もちろん、通常の同一生成元の制限が適用されます)。

トリッキーな部分は、フォームデータに追加できるFileオブジェクトを取得することです。私が知っている限りでは、Chrome拡張機能はNPAPIプラグインを使用する以外にファイルシステムに直接アクセスできないため、ユーザーのディスクドライブからファイルを取得することはできず、データを含むBLOBを作成するだけです。ただし、Firefox拡張機能には、パスでオブジェクトを作成できるFileコンストラクターがあります。File

したがって、Firefoxでは次のようになります。

var formdata = new FormData();
formdata.append("file", new File("file://C:/random.txt"));

var request = new XMLHttpRequest();
request.open("POST", "http://my.server/submitFile");
request.send(formdata);
于 2012-11-09T17:59:29.937 に答える
2

ファイアフォックス:

この回答によると、あなたが望むことは可能のようですが、私はそれを詳しく調査していません。

クロム:

NPAPI プラグイン以外では、これは絶対に不可能です。ユーザーがファイルダイアログを介して明示的に要求した場合を除き、ブラウザはファイルシステムにアクセスできません。Web 上の任意のページでプログラムによってファイルパスを設定し、ユーザーがフォーム ボタンをクリックしたときにファイルを取得できるとしたら、セキュリティ上の大きな懸念が生じるでしょう。

したがって、通常の Web ページでは明らかにそれができません。Chrome 拡張機能それを実行できる (つまり、ファイル システム内の任意のファイルを読み取る) 場合、最低限、特別なアクセス許可が必要になります。パーミッションのリストにはファイルシステムへのアクセスが含まれていないため、それは問題外です。

最初に述べたように、唯一の選択肢は、ファイルを読み取る NPAPI プラグインを開発することです。これは、にきびを治療する病院を建設するようなものです。NPAPI の開発学習曲線は非常に急勾配であり、重大なセキュリティ上の懸念が生じます (拡張機能がローカル ユーザーとして機能できるようになったため、セキュリティ侵害のコストははるかに高くなります)。

ファイルをブラウザの仮想 HTML5 ファイルシステムに配置したい場合は、それを行うことができます。あなたのニーズについて具体的な知識がなければ、それがあなたに適しているかどうかはわかりません.

于 2012-11-09T17:56:23.740 に答える