78

内部ツールとして使用する Chrome 拡張機能に取り組んでいます。必要な動作は次のとおりです。

  1. ページ アクションとして、特定のイントラネット ページを表示するときにアドレス バー アイコンを有効にします。
  2. ユーザーがアイコンをクリックすると、ページ上の特定のメディア タイプ (.jpg など) のすべてのファイルが識別されます。
  3. それらすべてをユーザーのローカル ドライブのディレクトリにサイレントに保存します。

この質問は以前にもありましたが、当時の答えは「NPAPI を使用する」であり、NPAPI は現在遺棄されています。

それで、これを達成するために現在利用可能な方法は何ですか?私が見たものは次のとおりです。

  • chrome.FileSystem API ---ただし、これはユーザーがアクセスできる場所にファイルを保存しません。代わりに、保存されたファイルは、文書化されていないディレクトリ内の難読化された名前の後ろに隠されています。ユーザーは、アクセス可能なディレクトリにファイルを元の名前で保存する必要があります。
  • data: URL を作成し、プログラムでクリックすることによる、HTML5 ダウンロード属性。これにより、ファイルごとに「名前を付けて保存...」ダイアログがポップアップ表示されますが、これは 1 ページに数百のアセットがある場合には受け入れられません。ユーザーは、アイコンを 1 回クリックする以外の操作を行わずにファイルをダウンロードする必要があります。
  • Chrome Download APIですが、これは beta および dev チャンネルでのみ利用できます。ユーザーは、この拡張機能が主流の Chrome で動作することを必要としています。
  • 単純にファイルをディスクに保存する小さな .exe を作成してネイティブ メッセージング APIを使用し、.jpg を blob として渡します。これは非常に面倒なようで、大きなブロブをそのようなEXEに確実に渡す方法さえわかりません。

私が試すことができる別のアプローチはありますか?

4

4 に答える 4

54

あなたはかなり多くの研究をしました。実際、プラグインや拡張機能がなければ、通常の Web ページはユーザーのファイルシステムに書き込むことができません。また、ご覧のとおり、HTML5 ファイルシステム APIは仮想ファイルシステムへのアクセスのみを提供します。

ただし、chrome.fileSystemAPI を HTML5 FileSystem API と混同しています。HTML FileSystem API とは異なり、Chrome のfileSystem(アプリ) API は、ユーザーが指定したユーザーのファイルシステム (または など) に直接書き込むことができます。~/Documents%USERPROFILE%\Documents

この API は Chromeアプリでのみ使用でき、拡張機能では使用できません。特に内部ツールを開発している場合は、アプリと拡張機能をインストールし、メッセージ パッシングを使用して拡張機能 (ページ アクション) とアプリ (ファイル システム アクセス) の間で通信できるため、これは問題ではありません ()。


概要chrome.downloads: あなたの拡張機能は内部的なものであるため、この API を使用するためにユーザーに beta/dev チャンネルへのアクセスを強制することができます。この API の唯一の制限は、ファイルがユーザー定義のダウンロード フォルダー (のサブディレクトリ) に保存されることです。

編集: chrome.downloadsAPI は、安定版ブランチを含むすべてのチャネルで利用できるようになりました (Chrome 31 以降)。

于 2013-11-06T13:49:24.467 に答える
6

宿題を済ませてしまったのではないかと心配しています。つまり、考えられるすべての代替案を検討したということです。

あなたが望むものを正確に達成するための最良の方法は、(あなたが述べたように)サポートするネイティブアプリを使用し、ネイティブメッセージングを介して通信することです. ところで、イントラネットでは帯域幅が問題になることはめったにないため、リソース (画像など) の URL を渡し、アプリでダウンロードして保存する方が簡単な場合があります。
(はい、単に拡張機能を開発するよりも面倒ですが、やらなければならないことをしなければなりませんよね?)

一方、開発の単純さよりもユーザー エクスペリエンスを少し犠牲にしても構わないと思っている場合は、HTML5 の利点 (ファイルをローカルで作成およびダウンロードできるようにする) と JS zip ライブラリ (例: JSZip )を組み合わせることをお勧めします。そのため、ユーザーは 1 つの zip ファイルをダウンロードするだけで済みます (プロンプトは 1 回だけ表示されます)。ところで、ユーザーが希望する場合は、プロンプトを表示せずに常にファイルをダウンロードすることを選択できます (ただし、それは既にご存じでしょう)。

于 2013-11-06T06:23:34.300 に答える
3

ネイティブ メッセージング アプリのアイデアを使用します。

ドキュメントが不十分なため、ネイティブ アプリは扱いにくく、書くのが面倒です。標準入力と標準出力が引き継がれるため、JSON の書式設定が両端で正確に正しく行われない限り、コンソールには何も表示されません。

ただし、標準ツール (Windows エクスプローラー、16 進数エディター、TeamViewer など) を使用してファイルを表示、移動、削除したり、その他の方法で何が起こっているかを確認したりできるため、完了したときはより満足できます。Chrome のサンドボックス ファイル システムは機能しますが、現在は行き止まりのようです (他のブラウザーは対応していません)。そのためのサードパーティ製ツールを開発する人は誰もいないでしょう。もちろん、すべてが機能するようになったら、おそらくツールは必要ありませんが、それまでは、どのファイルがどのディレクトリにあるのか、どのバージョンのファイルが残っているのかを追跡するためだけにコード (および非常に多くのコード) を記述する必要があるため、デバッグは悪夢です。ディスクスペース...

于 2014-11-20T21:33:26.200 に答える