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

とある地味なブログ

プログラミングとお絵かきに関する雑記。

IDを持つ要素のリンクを生成するだけのFirefoxアドオンを作ったった

Firefox javascript プログラミング

WindowsでFirefox Add-on開発 - とある地味なブログ

上の記事に引き続き、簡単なアドオンを作ってみました。
簡単すぎてむしろリンクすら生成していない。

概要およびダウンロード

Link Here :: Add-ons for Firefox

詳細

Link-Here/README.md at master · sujoyu/Link-Here · GitHub

コード

ディレクトリ構成は、cfx initで生成したままです。
テストも書いてません(てへぺろ

lib/main.js

メインの処理です。小さいですね。

var contextMenu = require("sdk/context-menu");
var windowUtils = require("sdk/window/utils");
var data = require("sdk/self").data;

var menuItem = contextMenu.Item({
  // コンテキストメニューの表示名
  label: "Link Here",
  // コンテキストメニューに表示する条件
  context: contextMenu.PredicateContext(function (context) {
    return context.targetID !== null;
  }),
  // コンテキストメニューがクリックされた時に実行されるスクリプト
  contentScriptFile: data.url("content-script.js"),
  // 上記スクリプトからメッセージを受け取った時の処理
  onMessage: function (id) {
    var window = windowUtils.getFocusedWindow();
    window.location.hash = "#" + id; 
  }
});

コンテキストメニューにメニューを追加するには、sdk/context-menuを使います。 現在フォーカスが当たっているwindowを取得するには、sdk/window/util.getFocusedWindow()を使います。

data/content-script.js

コンテキストメニューがクリックされた時に実行されるスクリプトです。

self.on("click", function (node) {
  var id = node.getAttribute("id");
  self.postMessage(id);
});

nodeには Node - Web API インターフェイス | MDN が入っているので、ここからIDを取得し、メッセージを投げます。

ソースコードsujoyu/Link-Here · GitHub にあります。