2015-05-26 20 views
7

Chrome'da, URL için etkin Sekmeler değişikliklerini izleyen bir işlev var.Bir Firefox eklentisinin içinde bulunan sekme URL'si değişikliği değişimi

Özellikle, URL'nin ne zaman değiştiğini saptamam gerekiyor, ancak yeni sayfa yüklemesi veya gezinme yok. Bazı siteler bunu yapar (ör. YouTube'da başka bir videoyu görüntülemek için tıkladığınızda).

chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) { 
    if (changeInfo && changeInfo.status == "complete") { 
     //do stuff here 
    } 
}); 

nasıl Firefox'ta tür değişiklikler eklenti tespit ediyorum:

Chrome'da Ben bununla gerçekleştirilebilir?

Kullanmak için söylendi: Listening to events on all tabs, ama bir araya getiremedim. Sorunlardan biri, uzantıda gBrowser'un tanımlanmamış olmasıdır.

Neyi yanlış yapıyorum?

Daha basit bir yolu var mı?

+0

nsIWebProgressListener esinlenen - https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsIWebProgressListener?redirectlocale=en-US&redirectslug=nsIWebProgressListener#onStatusChange % 28% 29 - Burada kullandım: https://github.com/Noitidart/Listen-on-Repeat-Youtube-Video-Repeater – Noitidart

+1

thx @Noitidart Bu çok basit bir görev için çok karmaşık görünüyor, ama tamam , dinleyiciyi tanımladım, firefox-addon sdk'yi kullanarak nasıl ekleyebilirim? Ben sadece yapamam: gBrowser.addProgressListener 'tabs.on ('hazır', function (sekme) { var tarayıcı = gBrowser.getBrowserForTab i gBrowser erişimi yok çünkü , ben bu sekme/utils'i kullanmak ve yapmaya çalıştık (sekme); tarayıcı.addProgressListener (progListener); ancak tarayıcı tanımsız – tiagosilva

+0

Çok sdk'ye aşina değilim. Kompleksinin nedeni, değişime neyin sebep olduğu konusunda birçok önemli bilgi sağlar. Sadece değiştirmek istiyorsanız, muhtemelen MutationObserver https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver?redirectlocale=en-US&redirectslug=DOM%2FMutationObserver#MutationObserverInit use 'characterData kullanabilirsiniz. 've anonim öğeyi izleyin, aksi halde tetiklemez. emin değilim eminim gözlemci sekme değişikliği kesmek olacaktır. https://ask.mozilla.org/question/542/mutation-observer-disconnects-from-anonymous-element – Noitidart

cevap

4

Kullanım ProgressListener yeri değişiklikleri hakkında haberdar olmak için.

Bir dinleyici yüklemek için SDK sekmesini viewFor kullanarak işlenmemiş (eski) gösterime dönüştürün. Geri dönüşüm, modelFor ve getTabForContentWindow ile mümkündür.

Uzantıların kaldırılmasında dinleyicileri kaldırmayı unutmayın. Sekme dinleyicileri otomatik olarak kaldırılır, ancak ProgressListeners olmayacaktır.

Converting to chrome windows

+1

Çok güzel ve basit bir çözüm için teşekkürler! Bir yorum olsa da, bu dinleyiciyi her sekmede açık tutmak zorunda değiliz. Tarayıcı penceresi başına sadece bir kez. – Noitidart

+0

Kaynak: https://github.com/mozilla/addon-sdk/blob/master/lib/sdk/content/page-worker.js#L101-L120 – mate64

+0

Bu cevap artık geçersiz. Firefox, Chrome API'lerini WebExtensions lehine onaylar. – Basilevs

0

Ek SDK'yı kullanıyorsanız, yanlış belgelere bakıyorsunuz demektir. İşte tab docs. Orada belirtildiği gibi

, bunu böyle bir dinleyici oluşturun: Eğer developer.mozilla.org/en-US/Add-ons/SDK bir alt kümesi olmalıdır bakmak

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

// Listen for tab openings. 
tabs.on('open', function onOpen(tab) { 
    myOpenTabs.push(tab); 
}); 

// Listen for tab content loads. 
tabs.on('ready', function(tab) { 
    console.log('tab is loaded', tab.title, tab.url); 
}); 

Tüm dokümanlar.

+2

tabs.on ('hazır') sekme değiştirilir- sadece cevaplar tavsiye edilmez, çünkü bir açıklama ile kod olarak öğrenmek kolay değildir.Bir açıklama olmadan, kodun soruyu cevaplarsa, ne yapıldığını, kodda yapılan değişiklikleri anlamak için daha fazla zaman ve çaba gerektirir . url değişti" ancak yeni sayfa lo vardı: vb açıklama insanlar cevap öğrenmek teşebbüsten hem önemlidir ve geçerli veya oy yukarı değer olup olmadığını cevabını değerlendiren Onları görmek – tiagosilva

0

Ben ikisi arasında activate ve pageshow olaylar, sayfaları, yeni bir sekmede sayfalarını açarken sekmeleri kapatma, ferahlatıcı, ben anahtarlama sekmeler arasında hokkabaz URL'de tüm değişiklikleri kapsayacak bulmak ve yeni yer yazarak URL.

var updateURL = function (tab) { 
var oldURL = url; 
var url = tab.url; 
console.log(url); 
}; 

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

Lütfen bu kod soruya nasıl cevap niçin/bir açıklama [değiştir]. Kodunuzu ajax yeni içerik alırken patlamaz ... – Makyen

+2

benim söz söylediği reklam veya navigasyon", senin örneklerin hiçbiri: (yeni sekmede sayfalarını açarken sekmeleri kapatma sayfaları ferahlatıcı ve yeni URL içinde yazarak, ben anahtarlama sekmeler arasında hokkabaz URL'de tüm değişiklikleri kapsamaktadır.) beni örnek kapsamaktadır: (Başka bir video görmek için tıkladığınızda youtube gibi) – tiagosilva

İlgili konular