2012-02-27 10 views
9

मैं एडन-एसडीके का उपयोग करके फ़ायरफ़ॉक्स में क्रोम प्लगइन पोर्ट करने की कोशिश कर रहा हूं और मुझे टैब नेविगेशन ईवेंट सुनने के लिए समकक्ष विधि नहीं मिल रही है।फ़ायरफ़ॉक्स एडन-एसडीके - पृष्ठ नेविगेशन के लिए सुनो

मैं क्या करने की जरूरत (, लेकिन ताज़ा करने पर डेटा को बनाए रखने के) प्रति पृष्ठ (डोम से पता चला) डेटा रखने के लिए, और के रूप में उपयोगकर्ता टैब में एक नया पृष्ठ पर जाने के रूप में जल्द ही इस को दूर

है मैं क्रोम, कुछ करने के लिए जब एक टैब URL परिवर्तन, मैं उपयोग कर सकते हैं:

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

Firefox में ऐड-ऑन-sdk मैं का उपयोग कर की कोशिश की है का उपयोग करते हुए:

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

समस्या यह है कि मैं में हुक नहीं कर सकता है मैं प्रारंभिक नेविगेशन घटना, इसलिए उपयोगकर्ता नेविगेटियन शुरू करने और नए पेज के डीओएम के बीच तैयार होने के बीच, पुराना डेटा उपलब्ध है।

असल में मुझे एक टैब की प्रारंभिक नेविगेशन में हुक करने का तरीका चाहिए और आदर्श रूप से यह कहां जा रहा है (जैसे मैं क्रोम में कर सकता हूं)।

कोई विचार?

उत्तर

11

फिलहाल टैब के साथ पेज लोडिंग का पता लगाने का कोई तरीका नहीं है। हालांकि आप पेज-मोड में स्टार्ट इवेंट के साथ ऐसा कर सकते हैं। मैं भी इस सही ढंग से करने में रुचि हूँ, इसलिए मुझे पिंग कृपया यदि आप पृष्ठ-mods उपयोग किए बिना एक रास्ता खोजने:

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 ट्रिगर की गति के बारे में पता नहीं है एफएफ एक्सटेंशन में गुजरने वाले सभी संदेश के साथ, इसमें कुछ समय लग सकता है (शायद 150 एमएमएस? अगर आपके पास बेंचमार्क है तो कृपया मेरे पास वापस आएं)

+0

आपके उत्तर के लिए धन्यवाद, मुझे इसे एक देना होगा। ऐसा लगता है कि यह वही करेगा जो मैं चाहता हूं (यद्यपि एक चौराहे के रास्ते में)। उम्मीद है कि एफएफ भविष्य में एक और सही एपीआई लागू करेगा। –

+2

@AdamHeath हाँ, यह बहुत अच्छा होगा कि मोज़िला और क्रोमियम के लोग एक सामान्य एपीआई पर सहमत हैं, spec HTML5 प्रक्रिया शैली लिखते हैं। – BenoitParis

+1

हाल ही में इसका परीक्षण किया गया, नौकरी करता है, इसलिए स्वीकार किए जाने के रूप में चिह्नित किया जाता है। धन्यवाद –

0

जहां तक ​​मुझे पता है, इसे खोलने वाले टैब, स्विचिंग के सभी मामलों को कैप्चर करना चाहिए टैब के बीच टैब और नेविगेटिंग के बीच। वैश्विक चर 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

संबंधित मुद्दे