8

ファイルを作成してそれにコンテンツを書き込む関数をjavascriptで記述したいのですが、この場合、誰かが私を助けてくれます。

ありがとう...

4

8 に答える 8

4

FirefoxではJavaScriptでファイルを書き込むことができますが、XPCOMオブジェクト(内部ブラウ​​ザAPI)を使用する必要があります。これは、WebページからロードされたJavaScriptには許可されておらず、Firefoxアドオン(高レベルの特権を持つ)内で実行されているJavaScriptによって使用されることを目的としています。

非特権(Webページ)JavaScriptがより多くの特権を要求する方法があり、ユーザーがそれを許可すると(許可を求めるポップアップダイアログが表示されます)、Webページコードはファイルに書き込むことができます。

しかし、さらに読む前に、警告:

これは標準のJavaScriptではないため、非常に特殊な方法で使用される非常に特殊なアプリケーション(たとえば、http://www.tiddlywiki.com/クライアント側のJavaScriptなど)を開発している場合を除いて、このアプローチはお勧めしません。 -HTMLのみのwiki)。

WebサイトでXPCOM特権を要求することは悪い習慣です!基本的には、サイトからダウンロードした.exeを実行するのと同じです。Firefoxを実行しているユーザーのIDを使用して、コンピューターへのフルアクセス(読み取り、書き込み、実行)を許可するようにユーザーに求めています。

XPCOMを使用する許可を要求します(これにより、ユーザーに確認を求めるプロンプトが表示されますが、回避する方法はありません)。

netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");

次に、XPCOMオブジェクト(Mozilla Developer Networkのサンプルコード)を使用してファイルに書き込みます。

   1. // file is nsIFile, data is a string  
   2. var foStream = Components.classes["@mozilla.org/network/file-output-stream;1"].  
   3.                          createInstance(Components.interfaces.nsIFileOutputStream);  
   4.   
   5. // use 0x02 | 0x10 to open file for appending.  
   6. foStream.init(file, 0x02 | 0x08 | 0x20, 0666, 0);   
   7. // write, create, truncate  
   8. // In a c file operation, we have no need to set file mode with or operation,  
   9. // directly using "r" or "w" usually.  
  10.   
  11. // if you are sure there will never ever be any non-ascii text in data you can   
  12. // also call foStream.writeData directly  
  13. var converter = Components.classes["@mozilla.org/intl/converter-output-stream;1"].  
  14.                           createInstance(Components.interfaces.nsIConverterOutputStream);  
  15. converter.init(foStream, "UTF-8", 0, 0);  
  16. converter.writeString(data);  
  17. converter.close(); // this closes foStream  

XPCOMを使用したFirefoxのI/Oの詳細については、https ://developer.mozilla.org/en-US/docs/Code_snippets/File_I_Oを参照してください。

于 2010-06-18T20:58:29.993 に答える
3

Web サイトの Javascript は、ローカル ファイル システムにアクセスできません。

データを保存したい場合は、サーバーまたは Cookie に保存します。

于 2010-06-18T07:16:35.840 に答える
2

セキュリティ上の理由から、ブラウザから直接ファイル システムに書き込むことは禁止されています。ただし、html5 では、オフライン ストレージをサポートできます。ここを見てください

Grz、クリス。

于 2010-06-18T07:16:24.890 に答える
1

Javascriptはクライアント側のコンテキストで実行されます。

http://www.tek-tips.com/viewthread.cfm?qid=1171273&page=1

于 2010-06-18T07:12:43.410 に答える
1

このための API があります。 File Writer API。初期の仕様はこちら: http://www.w3.org/TR/file-writer-api/ まだどのブラウザーにも実装されていません。

更新:実装が既に存在するようです。http://caniuse.com/filesystemhttp://www.html5rocks.com/en/tutorials/file/filesystem/をチェックしてください

于 2010-06-21T14:19:05.873 に答える
0

javascript にはリモート サーバーにファイルを書き込む機能がないという回答はすべて正しく、これはセキュリティ上の理由から言えますが、達成したいことはまだ可能かもしれません。

たとえば、JavaScript を使用して Web サイトでファイルを作成できるようにしたい場合は、サーバー側のスクリプト言語と AJAX 呼び出しを使用して作成できます。

例:

サーバー上にファイルupdate_last_access.phpがあり、ファイルが最後にアクセスされた時間を任意のファイルに保存するファイルを作成します。

次に、JavaScript関数にそのスクリプトへのAJAX呼び出しを作成させた場合、たとえばjqueryで

$.get("update_last_access.php")

次に、これによりサーバー側スクリプトが実行され、ファイルに書き込まれます。

これ以上のヘルプを提供する前に、何をしようとしているのかを明確にする必要があります。

于 2010-06-18T07:28:31.357 に答える
0

Firefox 3.6 を使用すると、JavaScript でファイルシステムからファイルを読み取ることができます。たとえば、私のEPUB リーダーの概念実証 を参照してください。

ただし、JavaScript から直接ファイルを書き込むことはできません。サーバーを経由する必要があります。

于 2010-06-18T07:31:40.277 に答える
0

Mozilla は FileSaver を Gecko 9 に含める予定です: https://bugzilla.mozilla.org/show_bug.cgi?id=557540

于 2011-10-30T10:07:49.373 に答える