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

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

……。

追記。更新。

Copy_Text_and_Link.user.js をバージョン 0.4 にした。GitHub に関して使うとき便利なように、PlainText のときタイトルのあとの改行の前にスペースを二つ追加した。

なお、ココログにアップロードできないので、GitHub にアップロード。

JRF2020/4/81799

直接ダウンロードするときは↓で。

《Copy_Text_and_Link.user.js》
https://github.com/JRF-2018/Copy_Text_and_Link/raw/master/Copy_Text_and_Link.user.js

JRF2020/4/80547

バージョン 0.4 以降の過去のバージョンが欲しい場合は、↓から辿っていけばよい。

《GitHub - JRF-2018/Copy_Text_and_Link》
https://github.com/JRF-2018/Copy_Text_and_Link

JRF2020/4/81399

……。

Selection_Search.user.js についてもいちおう GitHub にアップロードしておいた。

直接ダウンロードするときは↓で。

《Selection_Search.user.js》
https://github.com/JRF-2018/Selection_Search/raw/master/Selection_Search.user.js

JRF2020/4/88765

バージョン 0.2 以降の過去のバージョンが欲しい場合は、↓から辿っていけばよい。

《GitHub - JRF-2018/Selection_Search》
https://github.com/JRF-2018/Selection_Search

JRF2020/4/81841

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

トラックバック


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

他サイトなどからこの記事に自薦された関連記事(トラックバック)の一覧です。

» cocolog:88492515 from JRF のひとこと

Firefox のブラウザ拡張(アドオン)である PP Authorizer を作って公開した。匿名的ログインや匿名的支払いをサポートするためのアドオン。2,3 日で終った突貫工事で、完成度は高くないとは思うが…。... 続きを読む

受信: 2017-12-29 18:13:49 (JST)

» cocolog:88438901 from JRF のひとこと

Firefox 57 Quantum と Greasemonkey 4.0 の後方互換性のなさにイライラする。フリーで配布されているのはありがたく、そこに怒るのは筋違いではあるんだが、これまでの「資産」が使えなくなるのはやっぱり痛い。... 続きを読む

受信: 2017-12-29 18:14:10 (JST)