質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

1340閲覧

file system access apiで読み込んだディレクトリのハンドルを保存したい

DF64bit

総合スコア18

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2023/01/27 02:44

今、JavaScriptで、かんたんなテキストエディタを作ろうとしています。file system access apiというAPIを使ってフォルダをアップロードし、そのフォルダの中のtxtファイルを編集するというものです。一応このようなコードが完成しました。

html

1<!DOCTYPE html> 2<html> 3 <head> 4 <meta charset="utf-8"> 5 <title>テキストエディタ</title> 6 </head> 7 <body> 8 <h1>テキストエディタ</h1> 9 <p>フォルダをアップロードし、そのフォルダ内にあるテキストファイルを編集するアプリです(txtファイルしか編集できません)</p> 10 <div id="inuploadbutton"><button id="upload">フォルダをアップロード</button></div> 11 <script src="wordpad.js" charset="utf-8"></script> 12 <div id="other"></div> 13 </body> 14</html>

JavaScript

1var uploadButton = document.getElementById("upload"); 2uploadButton.addEventListener("click", 3async (e)=>{ 4 var dirHandle = await window.showDirectoryPicker(); 5 6 const file = await dirHandle.getFileHandle(window.prompt("編集したいファイルの名前をファイル拡張子名も含めて入力してください※txtファイルしか読み込めません")); 7 8 fileData = await file.getFile(); 9 var text = await fileData.text(); 10 document.getElementById("other").innerHTML = '<textarea id="content" name="content" rows="5" cols="33">' + text + '</textarea> <button id="save">保存</button>'; 11 document.getElementById("inuploadbutton").innerHTML = ""; 12 13 var saveButton = document.getElementById("save"); 14 saveButton.addEventListener("click", 15 async (e)=>{ 16 const sampleConfig = document.getElementById("content").value; 17 18 const blob = new Blob([sampleConfig], { 19 type: "text/plain" 20 }); 21 22 const writableStream = await file.createWritable(); 23 await writableStream.write(blob); 24 await writableStream.close(); 25 window.alert("保存しました。 "); 26 window.close(); 27 }); 28});

しかし、これではアプリを開くたびにフォルダをアップロードする必要があります。それは嫌なので、JavaScriptの4行目にある「window.showDirectoryPicker();」が返す、ディレクトリのデータが入っているオブジェクトをどこかに保存したいと考えています(もちろんブラウザを閉じてもデータが消えないところに)。オブジェクトをブラウザを閉じてもデータが消えないように保存できるAPIはありますか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

試したことはありませんが、FSAのスペックを見るとFileSystemDirectoryHandleSerializabeだそうなので、Indexed Databse に値として格納できるかもしれません。

投稿2023/01/27 04:56

int32_t

総合スコア20878

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

DF64bit

2023/01/30 00:34 編集

FileSystemDirectoryHandleはJSON.stringifyでそのままシリアル化できるオブジェクトなのですか?(実験もしてないのに聞いてすみません)
guest

0

cookieにしろlocalStorageにしろ保存できるのは文字列です
fileSystemDirectoryHandle をオブジェクトとして保持しておくことはおそらくできません。
クライアントサイドの環境にアクセスするには任意の入力が必要です

投稿2023/01/27 03:43

yambejp

総合スコア114833

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問