2016-04-05 14 views
0

Burada ve diğer siteler üzerinde dört veya beş örnek baktım ve hepsi bana bunu yapmak için benzer bir yol verir , ama çalışmıyor.Bir krom bul ve değiştir uzantısı yapmaya çalışıyorum, ama işe yaramıyor

// Manifest

{ 
    "manifest_version": 2, 
    "name": "Screw My Ex", 
    "permissions": [ 
    "https://www.facebook.com/*" 
    ], 
    "description": "Replaces her name", 
    "version": "0.1", 
    "content_scripts": [ 
     { 
      "matches": [ 
       "https://www.facebook.com/*" 
      ], 
      "js": [ 
       "content.js" 
      ], 
      "run_at": "document_end" 
     } 
    ] 
} 

//content.js

document.body.innerHTML = document.body.innerHTML.replace(new RegExp("the", "g"), "teh"); 

Ben, onun hatırı için, gerçek adını çıkarılıp ve teh ile yerini almıştır. Bunu yaparken bile işe yaramıyor. Her yere göre 'u kontrol ettim, bu çalışmalı, ama öyle değil ve nedenini bilmiyorum. Bunu daha çok JS'ye tazelemek ve yavaş yavaş kendim için daha fazla genişletme yapmak için yapıyorum, ancak şu anda bu konuda oldukça sinirliyim. Birisi bana yardım edebilir mi?

cevap

1

Yanlış değil, ancak bu, facebook'taki içeriğin çoğunu içeren document_end öğesinden sonra yüklenen içerikler için çalışmayacaktır (dinamik olarak yüklenmiş). Adını değiştirmeyi dene ve işe yaramalı.

Uzantımda denedim ve amaçlanan davranışı gösteriyor.

Dinamik olarak yüklenen içeriği değiştirmek için, her içerik yüklendikten sonra onu çağırmanız gerekir. Ya da basit (ama verimsiz) tutmak için javascript setInterval'ı periyodik olarak değiştirmek için kullanabilirsiniz.

ref: http://www.w3schools.com/jsref/met_win_setinterval.asp

DÜZENLEME:

Orada başka yolları vardır ama benim tercih edilen yöntem mutasyon gözlemciler kullanıyor,

var obs = new MutationObserver(function(mutations, observer) { 
     for(var i=0; i<mutations.length; ++i) { 

      //dom mutation observed, do your replace here 

      for(var j=0; j<mutations[i].addedNodes.length; ++j) { 

        // every mutated dom node triggers 
        // this area so you can check for 
        // specific case when news feed etc are 
        // mutated to make it even more sleek 
       } 
      } 
     } 
    }); 

    obs.observe(target, params); 
+0

Nasıl her yeni içerik yükü için dinleme hakkında gitmek? – Zackeezy

+0

Bu çalışır. Bir aralığa ayarlıyım ve nasıl istediğimin yerine geçer. Ancak, facebook bozuyor. Sohbet pencereleriyle vidalanıyor ve sadece sohbet etmek için facebook kullanıyorum. Yeni içerik yüklendiğinde işlevi hatırlamak için elimden nasıl geçebilirim? – Zackeezy

+0

Düzenlemeyi kontrol et, istediğin kadar istediğin gibi yapabilirsin, ama dev konsolda facebook'ta html düğümlerini ve hiyerarşisini gözlemlemek için biraz çaba göstereceğim –

İlgili konular