2017年10月1日日曜日

WebExtensionsでファイルに書き込む方法(未検証)

本当は「あえてjQueryで挑むコンポーネント指向・MVVM」の実践編を書こうと思ったのですが、サンプルコードをまだ作ってないので別の話題で。


今までブラウザの拡張機能とかは作ったことがないのですが、ふと拡張機能からファイルへの書き込み方法を知りたくなりました。

理由?そんな野暮なことは聞いちゃいけません。


どうやるの?

リファレンスを見てみると、io/fileというローレベルのAPIがあって、これを使えばまさに希望通りのことができそう。

ただし。

注意書きにこんな文言が。
これはFirefoxの古い技術だから、新しいアドオン作るときは使うなよ!絶対使うなよ!
なるほど、使えということか。

Firefox57以降は拡張機能用のAPIとしてWebExtensionsしか使えなくなるそうな。
そういえば、新しいFirefoxでは拡張機能が軒並みお亡くなりになるという話をちらほら聞いたことがあると思ったらこういうことだったのか( ・᷄ὢ・᷅ )

他に手はない?

もう一度リファレンスを見てみると、downloadsというものを発見。なんか名前からしてこれっぽいかも!

ただし、よく見たらURLを指定してWeb上にあるものをダウンロードする機能のようす…

しかし、諦めない。

めげずにいろいろ検索してみると、こんな記事が。
var csv = 'foo,bar,baz'
var blob = new Blob([csv], {type: "text/csv;charset=utf-8"})

chrome.downloads.download({
    'url': URL.createObjectURL(blob),
    'filename': 'file.csv',
})
なるほど、Blobを無理やりURLにすれば保存できるのか。かなり無理やり感があるし保存できる場所も限られてるみたいだけど、最低限やりたいことはできるみたいだから今度試してみよう。

あ、言っときますけど今回の記事は完全なる未検証ですので。

とりあえずやりたいことができた→とりあえず検索してみた→とりあえずそれっぽい記事があったからメモしてみた というだけです。あとでちゃんと検証結果も報告しますけどね。

0 件のコメント:

コメントを投稿