原因は、拡張子を配列で指定していないことでした。
ファイル選択ダイアログ表示する際に、選択対象をPDFファイルだけに制限しようと考えて、以下のような誤ったコードを書いていました。
dialog.showOpenDialogSync({
filters: [
{name: 'PDFファイル', extensions: 'pdf'} //これは誤りです。
]
});
しかしながら上記のコードでは、以下の画像のようにPDF以外のファイルも選択候補になります。
期待したのは、以下の画像のようにPDFファイルだけが選択候補となる事です。
正しくは、以下のようにextensions
に配列を記述すべきでした。
//これは誤りです。
dialog.showOpenDialogSync({
filters: [
{name: 'PDFファイル', extensions: ['pdf']}//正しくは、このように配列として渡します
]
});
今から考えると、extensions
という言葉自体が複数形なので、分かりそうなものですが、作業中は気づかず少し困っていました。
['jpg', 'jpeg']
のような、複数の拡張子を持つファイルであれば、もっと意識したかもしれませんね。
同じようにお困りの方のお役に立てれば幸いです。
公式ドキュメントを読んでみると、他にありがちなミスで、'pdf'
と書くべきところを*.pdf
と書いてしまったり、.pdf
と書いてしまったりするケースが紹介されていました。
https://www.electronjs.org/docs/api/dialog
The
https://www.electronjs.org/docs/api/dialogextensions
array should contain extensions without wildcards or dots (e.g.'png'
is good but'.png'
and'*.png'
are bad). To show all files, use the'*'
wildcard (no other wildcard is supported).
extensions配列は、ワイルドカードやドットは含めないでください。(例えば、
'png'
は正しいですが、'.png'
や'*.png'
はダメです)。全てのファイルを表示するには
'*'
ワイルドカードを使います。(他の種類のワイルドカードは、どれもサポートされません)