1

Mozilla Add-On Builder でアドオンを作成しようとしています。私が知る必要があるのは、アドオンを介してアクティブなタブで左クリックされたリンクの URL を取得し、それを新しいタブで開く方法です。

このプロセスには、page-mod を介してイベントリスナーを追加し、タブ モジュールを使用する必要があることは知っていますが、正しい構文を取得できないようです。

編集:(これは私がこれまでに持っているものです)

var Widget = require("widget").Widget;
var tabs = require('tabs');
var pageMod = require("page-mod");

exports.main = function() {


    pageMod.PageMod({
    include: '*',
    contentScriptWhen: 'ready',
    contentScript: "window.addEventListener('click', function(event) { self.port.emit( 'click',event.target.toString() )},false)",
    onAttach: function(worker) {
        worker.port.on("click", function(urlClicked) {
            tabs.open(urlClicked);

        });
     }

    }); 

};
4

1 に答える 1

0

そこにあるコードはほとんど正しく、私にとってはうまくいきます。ただし、コンテンツ スクリプト コードには 2 つの問題があります。

  • event.preventDefault()ブラウザがリンクをたどらないようにするために呼び出す必要があります。そうしないと、リンクされたページが現在のタブと拡張機能によって開かれた新しいタブの両方に読み込まれます。
  • event.target実際にリンクかどうかはチェックしません。リンクの子ノードである場合もあれば、リンクではない場合もあります。

全体として、コンテンツ スクリプトは次のようになります。

window.addEventListener("click", function(event)
{
  var link = event.target;
  while (link && link.localName != "a")
    link = link.parentNode;

  if (link)
  {
    self.port.emit("click", link.href);
    event.preventDefault();
  }
}, false);

このような重要なコンテンツ スクリプトの場合、contentScriptパラメーターを使用するのではなく、ディレクトリ内の独自のファイルに配置する必要がありますdata/contentScriptFileその後、パネルを構築するときにパラメーターを使用できます。

contentScriptFile: require("self").data.url("contentScript.js"),
于 2012-04-27T05:44:06.827 に答える