Chromeアップデートが行われ、HTMLファイルのNotificationが動かなくなった話

Notification API の変更

先日、Google Chrome のアップデートが行われ、Google Chrome 28 になった。
レンダリングエンジンが Webkit から 新レンダリングエンジン Blink に移行したりと大きな変更があった様子。
新機能としてリッチ通知が追加された。
その関係からか、Notification API にも変更があったようだ。

具体的には、HTML ファイルを指定して Notification させる方法が利用できなくなっている。

基本的な Notification の使用

アイコン、タイトル、メッセージを指定して表示する方法

このコードはこれまで通り動く。

var n = window.webkitNotifications.createNotification(icon, title, message);
n.show();

HTMLファイルを指定して Notification として表示する方法

このコードは動かなくなってしまっている。

var file = "notification.html"
var n = window.webkitNotifications.createHTMLNotification(file);
n.show();

createHTMLNotification() がそもそもなくなっているためだ。
createNotification() はこれまで通り存在する。

Chrome のコンソール上で、

console.log(window.webkitNotifications);

と実行してみればこれは確かめられる。

createHTMLNotification() がなくなっているおかげで、これを利用しようとするサイトやブラウザプラグインが軒並み死んでいる。

それでも createHTMLNotification() を使いたい場合はどうすればよいのでしょうか。

解決方法

結論から言うとよくわかりません。
調べてみたが、まだこの関係の情報は少なかった。

ボタンを設置できてたりするリッチな通知を出す方法として、

chrome.notifications

を使うやり方も出てきたが、まるで動かなかった。
正直良く分かりません。

console.log(chrome.notifications); // undefined

とコンソールに吐き出してみても、undefined だ。

暫定的な解決方法

HTML ファイルの Notification を少し使っていたためこの変更に気付いたのだが、そもそもなぜ HTML ファイルの Notification を使っていたかというと、通知をクリックされた際に任意の動作をさせたかったからであった。
つまり、通知される HTML ファイル内の JavaScript 内でクリックイベントを検知していたということだ。

このように単純に一つのクリックイベントを検知したいだけであれば、以下の方法で対応することができる。

var n = window.webkitNotifications.createNotification(icon, title, message);
n.onclick = function(e) {
  console.log("clicked!"); // 任意のコード
};
n.show();

結論

通知に対して単純に一つのクリックイベントを設定するだけなら上記コードのようにするとよい。

これまでのような HTML ファイルを指定した Notification をする方法はよく分からなかった。
また、chrome.notifications を利用したリッチ通知の利用方法もまだ未確認。
こちらに関してご存知の方は教えてくれるととても喜びます。