2012-02-27 7 views
9

addon-sdkを使用してChromeプラグインをFirefoxに移植しようとしていますが、これと同等の方法でタブナビゲーションイベントを聴くことができません。私がする必要がどのようなFirefox addon-sdk - ページナビゲーションを聞きます

が(DOMから検出された)ページごとにデータを保持し、ユーザーがタブに新しいページに移動するとすぐにこれを削除します(ただし、リフレッシュ上のデータ維持)

ですIクロム、タブは、URLを変更したときに何かをする、私は使用することができます:Firefoxので

chrome.tabs.onUpdated.addListener(function(tab_id, changeInfo, tab) { 
    if(changeInfo.status == 'loading' && changeInfo.url) { 
     //DO STUFF AS THE URL CHANGED 
    } 
}); 

を私が使用して試してみましたアドオン-SDKを使用して:

tabs.on('open', function(tab){ 
    tab.on('ready', function(tab){ 
    if(tab.cachedURL != tab.url) { 
     //DO STUFF AND SET CACHE 
    } 
    }); 
}); 

問題は、私はにフックすることができないということです私は慣習的なナビゲーションイベントであるため、ユーザがナビゲーションを開始し、新しいページのDOMが準備中である間に、古いデータが利用可能となる。

基本的には、タブの最初のナビゲーションに入り込む方法が必要で、どこに行くのかが理想的です(Chromeの場合と同じように)。

どのような考えですか?

答えて

11

現在のところ、タブでページの読み込みを検出する方法はありません。しかし、あなたはpage-modsのstartイベントでそれを行うことができます。私は、ページ・改造を使用しない方法を見つけた場合ので、私にpingを実行してください、また、右の方法これを行うに興味がある:

var pageMod = require("page-mod"); 
pageMod.PageMod({ 
    include: "*", // All DOM windows (ie. all pages + all iframes). 
    contentScriptWhen: "start", // page starts loading, at this point you have 
           // the head of the document and no more 
    contentScript: "", // inject no script, you can even omit this 
    onAttach: function onAttach(worker) { 
      if (worker.tab.url == worker.url) // test if at top level 
       doStuff(worker.tab.url); 
      // cleanup the attached worker 
      worker.destroy(); 
     } 
    } 
); 

また、私のように、ONATTACHトリガの速さを知りませんすべてのメッセージがffの拡張子で渡されると、時間がかかります(おそらく150msですか?これについてベンチマークがあれば私に戻ってください)

+0

あなたの答えをありがとう、私はこれを行かなければならないでしょう。それは、私が(ラウンドアバウトの方法ではあるが)やりたいことをするように見える。うまくいけば、FFは将来もっと正確なAPIを実装するでしょう。 –

+2

@AdamHeathええ、MozillaとChromiumの人たちが共通のAPIに同意し、仕様HTML5プロセススタイルを書いていることは素晴らしいことです。 – BenoitParis

+1

これを最近テストしたところ、仕事をしています。ありがとう –

0

私が知る限り、これは開いているタブタブ間をナビゲートすることができます。グローバル変数urlには常にアクティブなタブのURLが含まれており、console.log呼び出しにはそれに影響を与えるすべてのイベントが記録されるはずです。

var tabs = require("sdk/tabs"); 
var url; 

var updateURL = function (tab) { 
    var oldURL = url; 
    url = tab.url; 
    console.log(oldURL+" --> "+url); 
}; 

tabs.on("activate", updateURL); 
tabs.on("pageshow", updateURL); 

updateURL(tabs.activeTab); 
+1

私は行 "url = tab.url"はconsole.log出力の上にあるべきだと思います。 – goelakash

関連する問題