野良 Scrapbox アプリ - ブラウザで開いたページを URL Scheme 経由で開く

Scrapbox を ブラウザで開いていてから「このページ sbe で開きたいなあ」ということがよくあります。

もともと sbe には URL をペーストして新規タブでページを開く機能はありますが、やはり手動はめんどくさいものです。

Electron にはシステムの URL Scheme で開かれるアプリとして自分自身を指定できる機能があります。

electronjs.org

この機能と bookmarklet などを組み合わせるとやりたいことが実現できそうです。

アプリの main プロセスで、sbe:// の形式での URL が発行されたときに呼び出されるよう setAsDefaultProtocolClient("sbe") のように指定した上で、open-url イベントを受け取り URL を取り出してrenderer プロセスに通知する処理を追加。

  :
  app.setAsDefaultProtocolClient("sbe");
  :
  app.on("open-url", (event, url) => {
    mainWindow.webContents.send("openUrlScheme", url.replace("sbe://", ""));
  });  

renderer プロセスでは指定 URL でページのタブを作成する処理を追加すれば良いはずです。

  :
  ipcRenderer.on("openUrlScheme", (event, url) => {
    tabGroup.openUrl(url);
  });
  :

ブラウザで URL の先頭に sbe:// を付けると確認ダイアログが出ます。

f:id:kondoumh:20191007195755p:plain

sbe.app を開く を選択すると無事に sbe 側のタブが開きました。

f:id:kondoumh:20191007200258p:plain

Windows の場合は、アプリへのコマンドライン引数として入ってきますので、main プロセスで引数の解析をして sbe:// とマッチするパターンから URL を取り出すようにします。

ブラウザに、今見ているページを sbe で開くための下記のような bookmarklet を追加してみました。

javascript:(function(){location.href=`sbe://${window.top.location.href}`})();

一応、期待通りの動作をします。bookmarklet だとマウス操作が必要になってしまうので、ショートカットキーも登録できる Surfingkeys などの拡張を使うと便利です。

chrome.google.com

ということで、URL Scheme 対応版をリリース。このバージョンから配布形式がインストーラーになってます。

Release v1.1.0 · kondoumh/sbe · GitHub