« 前のひとこと | トップページ | 次のひとこと »

cocolog:88438902

Firefox の Greasemonkey で右クリックのコンテクストメニュー(contextmenu)を開くとき、コンテクストメニューのターゲットをどうやって取るか? …やっと解決した。 (JRF 3249)

JRF 2017年11月17日 (金)

昔は、gContextMenu という Firefox の拡張機能(add-on、アドオン)で使えるグローバル変数が使えた痕跡があるのだが、今は gContextMenu は使えない。document.popupNode も e.target.parentNode.triggerNode もうまくいかなかった。

JRF2017/11/176492

それが↓に載っている例を見てやっと解決した。

《Source for "Context Menu Example" - Userscripts.org》
http://userscripts-mirror.org/scripts/review/150793

JRF2017/11/177939

答えは…、document.documentElement の contextmenu イベントに addEventListener して、そのときのイベントの target が欲しいものなので、これを何らかの形で記録しておく…というもの。

JRF2017/11/176088

それを使って FireLink または MakeLink というアドオンのかわりとなる Greasemonkey 4.0 スクリプトを書いたのが↓になる。(一応、Greasemonkey 3 とかでも使えるよう互換性コードは入れてあるから、Greasemonkey 4 でなくとも使えるはず。)

《Copy_Text_and_Link.user.js》
http://jrf.cocolog-nifty.com/archive/javascript/Copy_Text_and_Link.user.js

JRF2017/11/173246

コンテクストメニューへの登録は、Greasemonkey でバージョンの互換性をもたせるときに使う gm4-polyfill.js を参考にした。

このソースは、コンテクストメニューにサブメニューを追加する例にもなっている。

JRF2017/11/177203

実際に FireLink や Make Link の代替として使うときは、個人の設定に合わせるため、上のソースをいじって使って欲しい。ソースを読むのは簡単だと思う。

ライセンスは…私個人としてはパブリックドメインでいいと思う。元の "Context Menu Example" のライセンス "the Do What The Fuck You Want To Public License, Version 2, as published by Sam Hocevar" に従うというならそれもいいかもしれない。

JRF2017/11/171141

……。

追記。

さっきググってて見つけたんだけど、FireLink の代わりのアドオンは私の場合、Format Link で充分そう。

まぁ、コンテキストメニュー周りの javascript の書き方がわかったのは収穫ということで…。

JRF2017/11/173417

……。

追記。

マウスでドラッグして選択した部分(セレクション)を使うのは window.getSelection().toString(); で OK。それはこのひとことの前から知っていた。それを今回学んだサブメニュー形式と組み合わせた例が↓。

《Selection_Search.user.js》
http://jrf.cocolog-nifty.com/archive/javascript/Selection_Search.user.js

上の Copy_Text_and_Link.user.js もそうだけど私個人用のコードが入っているので、適当に改変して使って欲しい。

JRF2017/11/238265

……。

追記。

短縮 URL サービス(今回は is.gd)を使う例を上の Copy_Text_and_Link.user.js に足しておいた。改変して使って欲しい。今回のバージョンは、0.3。

前回のバージョン 0.2 が欲しいということはないと思うが、一応、↓に置いておく。

《Copy_Text_and_Link-20171117.user.js》
http://jrf.cocolog-nifty.com/archive/javascript/Copy_Text_and_Link-20171117.user.js

JRF2017/11/249670

今回のバージョン 0.3 の固定リンクが欲しいという方用に、一応、↓も置いておく。

《Copy_Text_and_Link-20171124.user.js》
http://jrf.cocolog-nifty.com/archive/javascript/Copy_Text_and_Link-20171124.user.js

GM.xmlHttpRequest で Promise を使ったプログラミングを試してみたかったので、余技的にやった。エラーまわりが納得できないが、まぁ、普通に使う分には問題ないと思う(思いたい)。

JRF2017/11/242163

……。

追記。更新。

TEXTAREA 等のセレクションを取るには window.getSelection().toString() だけでは不十分で document.activeElement の selectionStart と selectionEnd を見ないといけない。そうするように Selection_Search.user.js を更新した。バージョン 0.2。

JRF2017/11/246581

前回のバージョン 0.1 が欲しいということはないと思うが、一応、↓に置いておく。

《Selection_Search-20171123.user.js》
http://jrf.cocolog-nifty.com/archive/javascript/Selection_Search-20171123.user.js

JRF2017/11/249476

今回のバージョン 0.2 の固定リンクが欲しいという方用に、一応、↓も置いておく。

《Selection_Search-20171124.user.js》
http://jrf.cocolog-nifty.com/archive/javascript/Selection_Search-20171124.user.js

JRF2017/11/242197

これで、JSActions の代替がかなりできるようになった。外部プログラムが使えないのはどうしようもないが…。

JRF2017/11/247263

まぁ、どうしても外部プログラムを使いたい場合は、ローカルで httpd を何か起動して、GM.xmlHttpRequest で localhost にアクセスして CGI をお通してお好みのアプリケーションを起動する(参: [aboutme:138896])…とかはできるけど、面倒くさいし処理が重くなりがちだからなぁ…。

JRF2017/11/249103

« 前のひとこと | トップページ | 次のひとこと »

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/93568/66053065

トラックバックのポリシー

他サイトなどからこの記事に自薦された関連記事(トラックバック)はまだありません。

このころのニュース