2017-01-14 2 views
0

Ich habe versucht, die Antwort auf diese Frage für etwa eine Stunde jetzt, und kann nichts finden. Ich erstelle eine Chrome-Erweiterung, die "Hillary Clinton" durch "Donald Trump" ersetzt. Sie funktioniert auf allen Websites mit Ausnahme von Facebook. Es funktioniert mit den Namen von Personen, die angezeigt werden, wenn Sie es suchen, aber nicht für die Posts. Mein Code:Chrome Erweiterung, die Worte ersetzt funktioniert nicht auf Facebook

walk(document.body); 

function walk(node) 
{ 
    var child, next; 

    switch (node.nodeType) 
    { 
     case 1: // Element 
     case 9: // Document 
     case 11: // Document fragment 
      child = node.firstChild; 
      while (child) 
      { 
       next = child.nextSibling; 
       walk(child); 
       child = next; 
      } 
      break; 

     case 3: // Text node 
      handleText(node); 
      break; 
    } 
} 

function handleText(textNode) 
{ 
    var v = textNode.nodeValue; 
    var z = textNode.nodeValue.nodeValue; 

    v = v.replace(/\bHillary Clinton\b/gi, "Donald Trump"); 
    textNode.nodeValue = v; 
} 

Mein Manifest:

{ 
"manifest_version": 2, 
    "name": "Hillary Trump", 
    "description": "CHANGE THIS!!!", 
    "version": "1.0", 
    "content_scripts": [ 
     { 
      "matches": [ 
       "*://*/*", 
       "https://*.facebook.com/*" 
      ], 
      "js": [ 
       "jquery.js", 
       "content2.js" 
      ], 
      "run_at": "document_end" 
     } 
    ], 
    "icons": { "16": "icon16.png", 
      "48": "icon48.png", 
      "128": "icon128.png" }, 
    "browser_action": { 
     "default_popup": "popup.html" 
     } 
} 
+0

Vielleicht wird Ihre Walk-Funktion ausgeführt, bevor die Seite geladen wird. Facebook-Seiten sind sehr dynamisch, Sie müssen dies in Ihrem Code berücksichtigen –

+0

@JaromandaX, Entschuldigung, ich bin neu, wie würde ich das tun? –

+0

Verwenden Sie [Mutation Observer] (https://developer.mozilla.org/en/docs/Web/API/MutationObserver) –

Antwort

0

Verwenden Mutation Observer wie diese

function handleTextnode(textnode) { 
    textnode.nodeValue = textnode.nodeValue.replace(/Hillary Clinton/gi, "Donald Trump"); 
} 

function walk(root) { 
    var handleChildren = function (node) { 
     [].filter.call(node.childNodes, function(child) { 
      return child.nodeType == 3; 
     }).forEach(handleTextnode); 
    } 
    handleChildren(root); 
    [].forEach.call(root.querySelectorAll('*'), handleChildren); 
} 

var observer = new MutationObserver(function(mutations) { 
    mutations.forEach(function(mutation) { 
     if (mutation.type == "childList" && mutation.addedNodes.length) { 
      [].forEach.call(mutation.addedNodes, walk); 
     } 
    }); 
}); 
var options = { 
    childList: true, 
    subtree: true 
}; 
observer.observe(document.body, options); 

walk(document.body); 
+0

Leider hat das nicht funktioniert:/Mein Code: –

+0

http://pastebin.com/R5qwCrf2 –

0

ich eine einfache UPDATE erstellt haben, damit es funktioniert Alles, was Sie brauchen, um tun, ist die ganze Sache in einem setInterval wie unten enthalten:

window.setInterval(function(){ 
    // ADD CODE HERE!! 
} 
Verwandte Themen