ダメダメなJetpackスクリプト(スライドのアイコンを出しっぱなしにするもの)
Jetpackのスライドバーがちょっと面白いわけだが、毎回矢印を押してアイコンを出した後に、ってのが面倒なので書いてみた。
何がダメって、JetpackのAPIをほとんど使ってないところ。
jetpack.statusbar.append
を使うとステータスバーにiframeが入って中身がHTMLなのが気に食わない、かつ、オイラはjQueryが分からない、という理由なわけだが。
let [chromeWin, chromeDoc] = let (doc=jetpack.tabs.focused.raw.ownerDocument.defaultView) [doc.window, doc.document]; let bar = chromeWin.slideBar; function getSlideState(){ return !!bar.state.size; } function getImageSrc(bool){ return bool ? bar.slideButtonLeft : bar.slideButtonRight; } let ID = "jetpack-slide-feature-ext"; let panel = chromeDoc.getElementById(ID); if (panel){ chromeDoc.createElement('statusbarpanel'); panel.setAttribute('id',ID); panel.setAttribute('class','statusbarpanel-menu-iconic'); panel.setAttribute('image',getImageSrc(getSlideState())); panel.addEventListener("click", function(){ let state = getSlideState(); state ? bar.slide(0) : bar.slide(32,true); this.setAttribute('image', getImageSrc(!state)); },false); chromeDoc.getElementById('status-bar').appendChild(panel); }
やっぱりこういうコードは書いちゃダメだね。おそらくアンインストールしてもステータスバーのものとかが消えなくて、Fxの再起動をしないといけないと思われる。
Jetpackの良さが完全に失われてしまう悪例だな。
というか、jetpack.statusbar.append
はXULもサポートすべき。引数のオプジェクトにxul
プロパティがあったら、要素化してstatusbarpanel
要素とともに追加するとかの方が既存の拡張開発者にとっては分かりやすい気がする。
HTMLでインターフェースを記述するのは間違ってる。