

通常の javascript
だったらサイトにアクセスするだけでローカルファイルが書き換えられるのはセキュリティ的にNGだと思うんですが、拡張機能で意図的にインストールしたものであればできてもよさそうだと思うんですが可能でしょうか？

* * *

やりたいことは chrome 拡張機能で特定のサイトのレスポンスをひたすら保存し続けることで、レスポンス内容は拡張機能内の javascript
文字列として取得できるようにはなりました

ローカルにログサーバーを立ててそこにおくってサーバーで保存するみたいなことをすれば可能だとは思うんですが、サーバーを別に建てるとなると複雑になってしまうので
chrome 拡張内で保存できればブラウザだけですむので質問した次第です

manifest.json

[code]

    "devtools_page": "devtools.html"
    
[/code]

で devtool page devtool.html 内の devtool.js から  
chrome.devtools.panels.create  
で panel.html を作ってその panel.html 内の panel.js 内でファイル書き込みをしたいです

できないならできないって回答いただけるだけでも  
それならおとなしくログサーバーたてようと思うので助かります

* * *

「javascript ファイル書き込み」で検索するといくつかでてきたんですが

  * [Chrome拡張機能でFileSystemAPIを使ってみた](https://thinkami.hatenablog.com/entry/20120103/1325539053)

こちらは以下のエラーとなります

[code]     Uncaught ReferenceError: WebKitBlobBuilder is not defined

    
[/code]

  * [Chrome拡張機能のローカルファイルシステムへの書き込み](https://living-sun.com/ja/javascript/380052-writing-to-local-file-system-in-chrome-extension-javascript-google-chrome-google-chrome-extension.html)

これも以下のエラーになります

[code]     window.requestFileSystem is not a function

    
[/code]

  * [Native File System APIを試してみる](https://qiita.com/pentamania/items/ada07c45d4e5cc139c03)

以下のエラーとなります

[code]     Uncaught (in promise) DOMException: Failed to execute
'showSaveFilePicker' on 'Window': Cross origin sub frames aren't allowed to
show a file picker.

    
[/code]


CC BY-SA 4.0
2021-07-11T09:32:10.200
78113
2021-07-12T01:14:37.533
2021-07-11T10:46:26.750
3060
question
chrome-extension google-chrome-devtools
chrome extension 内からローカルファイルに書き込むことってできませんか？


APIの仕様が提示された記事から変わっていそうですが、File System Access APIで新規ファイルの作成までやってみました

この記事が利用サンプル多くてわかりやすかったです  
<https://web.dev/file-system-access/>

仕様ページも参考までに  
<https://wicg.github.io/file-system-access/>

[code]

    // 書き込み時にtest()を呼び出す
    async function test() {
        const handle = await getNewFileHandle()
        await writeFile(handle, "hello")
    }
    
    async function getNewFileHandle() {
        const options = {
          types: [
            {
              description: 'Text Files',
              accept: {
                'text/plain': ['.txt'],
              },
            },
          ],
        };
        const handle = await window.showSaveFilePicker(options);
        return handle;
    }
    
    async function writeFile(fileHandle, contents) {
        const writable = await fileHandle.createWritable();
        await writable.write(contents);
        await writable.close();
    }
    
[/code]


CC BY-SA 4.0
2021-07-12T01:14:37.533
78116
2021-07-12T01:14:37.533
298
78113
answer