2012-04-26 10 views
1

Mozillaアドオンビルダを使用してアドオンを作成しようとしています。私が知る必要があるのは、アドオンを通じてアクティブなタブで左クリックされたリンクのURLを取得し、新しいタブで開く方法です。クリックしたリンクのURLを取得する方法は?

このプロセスでは、page-modを通じてeventlistenerを追加してからtabsモジュールを使用することがわかっていますが、正しい構文を取得できないようです。

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

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); 

     }); 
    } 

    }); 

}; 
+2

お試しいただいた内容を表示できますか?アプローチは正しいので、あなたのコードなしでは、あなたが間違っていた場所を教えてくれません。拡張子にメッセージを送り返すのではなく、コンテンツスクリプトから 'tabs'モジュールを使って試みた疑いがあります。 –

+0

ウラジミール、私はこれまでに持っていたコードを含めるためにオリジナルの投稿を編集しました。私が必要としているのは、クリックされたリンクのURLを取得し、そのURLの一部を操作して、別のタグを作成して新しいタグで開くことができるようにすることです。今は意味が分かりますか? – Cuyware

答えて

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"), 
+0

ウラジミール、それは働いているようです。私はもう一つ質問があります。 httpsを使用するGoogleドキュメントのリンクをクリックすると、「セキュリティエラー:https:***のコンテンツがURLを表す星でhttps:***のデータを読み込まないことがあります」というセキュリティエラーが表示されます。 – Cuyware

+0

@Cuyware:セキュリティエラーがあなたの内線に関連していないことは間違いないと確信しています。これはGoogle内部のいくつかの問題です。 –

+0

hrefターゲットのタイトルに.pdfがあると思っていたので、これをテストする方法があると思っていました。 – Cuyware

関連する問題