読者です 読者をやめる 読者になる 読者になる

新・日々の暮らしに疲れてない?

一人バンド、火頭工房

Chrome拡張機能 左クリック長押しでページを新タブで開くショートカット機能 続き。

Chrome拡張機能 左クリック長押しでページを新タブで開くショートカット機能 の追記、改善し快適に動作するようになりました。

 

まずsetTimeout関数が作動しない問題について。

これは私の勘違いで、作動していないのはdocument.onmousedownイベントの方でした。これがあるサイトのある要素ではなぜか作動しません、最後までこの原因は不明、onmouseupやonmouseoverは作動するのに謎すぎ。

 

解決策として、作動が確認できていたonmouseoverイベントにてURLを取得、同時に「そのURLを持つ要素」に対してonmousedownイベントを取り付け、作動するよう仕組みました。onmouseoverイベントは発火しまくるのであまり好きではないのですが仕方ありません、原因がわかったら直します。

 

次、新タブに勝手に注目してしまう問題。

大幅にメスを入れました。chrome.tabsやchrome.windowsといったAPIを使えばタブを新規作成したりページを開いたりできます、ここでfocusを指定でき、これによりタブ移動を制御できました。あまり期待していなかったので、成功した時はかなり嬉しかったです。このAPIを使う方法は当初のやり方よりかなり面倒なのを知っていたので、決意するまで腰が重かったです。

 

あと、新タブ問題を制御できたということで次の課題。

長押しで新タブでページを開いた後、マウスボタンを離すとクリックイベントが発火してしまい、元タブの方でもリンクを開いてしまう問題。

 

ま、そうなるわな。関数のどこかでマウスクリックを preventDefault() などでキャンセルし、ボタンを離しても何も起こらないように、かつonmouseup時にクリック機能を復活させるため document.onclick = " "; これで戻りました。

 

一応これで完了。

どうしても作動させられないのは、iframe(まとめサイトとかで記事のタイトルがズラーって並んでる小窓みたいなアレです)の中のリンク取得や、サムネイルを自動で一覧表示しているようなサイトの場合。これらはウェブセキュリティ的にJavaScriptからリンクの取得ができないようになっていますので、無理。

 

この拡張機能、しばらくテストを重ね、問題なければ公開します。

でも作動する場合としない場合があるっていうのはちょっとなぁ...。

 

↓公開しました。

chrome.google.com