2018-09-07T23:34:15Z

Firefox userChrome.js用スクリプト:CopyTabTitleURL.uc.js

Firefoxを使いやすくする。タブのタイトルとURLをコピーしたかったけど出来なかったので自作してみた。

タブのタイトルとURLをコピーする

ブログ書いていると何かとWebページのタイトルやURLを取得する機会が多ので、Firefoxアドオンを探しましたが、どうもFirefox Quantum以前ならばアドオンがあったようですが、今は存在しないようです。なので、自分で自作してみました。

動作環境は、userChrome.jsを使用しています。

アドオン版も作れたら作ってみたいです。

Firefoxアドオン版を作成しました。

userChrome.jsとは

Greasemonkeyなどはサイトに対してのユーザスクリプトですが、userChrome.jsはFirefoxのブラウザに対するユーザスクリプを実行する方法です。そのため、ある程度の知識がない場合、使用することはおすすめできません。

userChrome.jsは、Firefoxのアドオンができることであれば基本的に出来ると考えて良いでしょう。そのため、アドオンのuserChrome.js簡易版などが存在します。アドオンでは、出来ないこともできるため、アドオンより危険であるともいえます。

userChrome.jsの導入方法は、「userChrome.js用スクリプト 」のスクリプトを利用する方法を参考にするといいでしょう。

Firefox62対応

参考:Firefox62のuserChrome.js対応

補足

導入の際にFirefoxが64bit版(「Program Files」に格納されている)であることを確認してください。筆者の環境では、「Program Files(x86)」では動作しませんでした。

結果

タブメニュー
タブメニューの最上部に「タブのタイトルをコピー」と「タブのURLをコピー」を追加しました。メニューを選択すると、クリップボードにタイトル/URLをコピーします。

CopyTabTitleURL.uc.js

// ==UserScript==
// @name          CopyTabTitleURL.uc.js
// @description   タブコンテキストメニューから選択しているタブのタイトルとURLをコピーする
// @include       main
// @charset       UTF-8
// @author        toshi(http://www.bugbugnow.net/)
// @license       MIT License
// @version       1
// ==/UserScript==

(function () {
  // タブのタイトルをコピー
  var mt = document.createElement("menuitem");
  mt.setAttribute("id", "context-copytab-title");
  mt.setAttribute("label", "タブのタイトルをコピー");
  mt.addEventListener('command', function() {
    var title = TabContextMenu.contextTab.linkedBrowser.contentTitle;
    var clipboard = Cc['@mozilla.org/widget/clipboardhelper;1']
                      .getService(Ci.nsIClipboardHelper);
    clipboard.copyString(title);
  });
  
  // タブのURLをコピー
  var mi = document.createElement("menuitem");
  mi.setAttribute("id", "context-copytab-url");
  mi.setAttribute("label", "タブのURLをコピー");
  mi.addEventListener('command', function() {
      var url = TabContextMenu.contextTab.linkedBrowser.currentURI.spec;
      var clipboard = Cc['@mozilla.org/widget/clipboardhelper;1']
                        .getService(Ci.nsIClipboardHelper);
      clipboard.copyString(url);
  });
  
  // セパレータ
  var ms = document.createElement("menuseparator");
  ms.setAttribute('id', 'context-copytab-sep');
  
  // メニューバーの最上部に要素を追加
  // タブのタイトルをコピー
  // タブのURLをコピー
  // セパレータ
  var tabContextMenu = document.getElementById("tabContextMenu");
  tabContextMenu.insertBefore(ms, tabContextMenu.firstChild);
  tabContextMenu.insertBefore(mi, tabContextMenu.firstChild);
  tabContextMenu.insertBefore(mt, tabContextMenu.firstChild);
}());
 コメントを投稿