2012-04-13 6 views
1

Gemäß diesem Beitrag Log a web page's dynamically-created tag attributes with a userscriptDOM-Ereignisse Mit der Zählung von document.createElement drucken ruft in Javascript

i die Attribute abgerufen und enthalten auch die Anordnung, wie vorgeschlagen, wie

addJS_Node ("var arr=[];");

i erfolgreich gedrückt die src-Attribute zu arr array, weil ich keinen Fehler bekommen habe.

Jetzt bin ich verwirrt, wo das Array angezeigt werden soll.

Mein Code ist wie folgt

// ==UserScript== 
// @name  Tags Monitoring 
// @namespace PC 
// @run-at  document-start 
// ==/UserScript== 
//--- Intercept and log document.createElement().tagattributes 
addJS_Node ("var arr=[];"); 
function LogNewTagCreations() 
{ 
    var oldDocumentCreateElement = document.createElement; 
    document.createElement  = function (tagName) 
    { 
     var elem = oldDocumentCreateElement.apply (document, arguments); 
     if(tagName=='script')  
     GetScriptAttributes (elem); 
    return elem; 
    } 
} 
function GetScriptAttributes (elem, tagNum, timerIntVar) 
{ 
    /*--- Because the tags won't be set for some while, we need 
    to poll for when they are added. 
    */  
    GetScriptAttributes.tagNum = GetScriptAttributes.tagNum || 0; 
    if (! tagNum) 
    { 
     GetScriptAttributes.tagNum++; 
     tagNum = GetScriptAttributes.tagNum; 
    } 
    /*-- Getting the required attributes */ 
    if (elem.src) 
    { 
     doneWaiting(); 
     arr.push(elem.src); 
     console.log (
     tagNum," has a src attribute of:", elem.src,"=========",arr.length 
     ); 
    }  
    else 
    { 
    if (! timerIntVar) 
    { 
     var timerIntVar = setInterval 
     (
      function() 
      { 
       GetScriptAttributes (elem, tagNum, timerIntVar); 

      }, 
      50 
     );    
    }   
}  
function doneWaiting() 
{ 
    if (timerIntVar) 
    { 
     clearInterval (timerIntVar); 
    }  
}  
} 
/*--- The userscript or GM script will start running before the DOM is available. 
    Therefore, we wait... 
    */ 
    var waitForDomInterval = setInterval (
    function() { 
    var domPresentNode; 
    if (typeof document.head == "undefined") 
     domPresentNode = document.querySelector ("head, body"); 
    else 
     domPresentNode = document.head;  
    if (domPresentNode) { 
     clearInterval (waitForDomInterval);    
     addJS_Node (GetScriptAttributes.toString());      
     addJS_Node (null, null, LogNewTagCreations); 
    } 
}, 
1 
); 

addJS_Node("document.onreadystatechange = function(){if (document.readyState ==  'complete'){console.log(arr.length);}}"); 

//--- Handy injection function. 
function addJS_Node (text, s_URL, funcToRun) { 
var D         = document; 
var scriptNode       = D.createElement ('script'); 
scriptNode.type       = "text/javascript"; 
if (text)  scriptNode.textContent = text; 
if (s_URL)  scriptNode.src   = s_URL; 
if (funcToRun) scriptNode.textContent = '(' + funcToRun.toString() + ')()'; 
var targ = D.getElementsByTagName ('head')[0] || D.body || D.documentElement; 
targ.appendChild (scriptNode);  
} 

Ich möchte geschaffen, um die Anzahl von Tags drucken dynamisch, weshalb ich Array hinzugefügt. Ich versuchte zunächst, mit Script-Tags nur und wie kann ich das Array wissen abgeschlossen ist und damit ich die Array-Länge

drucken
+0

Ich habe versucht, 'addJS_Node ("document.onreadystatechange = function() {if (document.readyState == 'complete') {console.log (arr.length);}}");' ich bin immer 0 beim Start und am Ende ist es wieder Drucken 3, während die tatsächliche Länge ist 5 Bitte helfen Sie mir, ich versuche dies für die letzten 1 Woche, aber ich bin nicht in der Lage zu bestimmen, wann das Array – user1275375

+0

sicher zu drucken. Veröffentlichen Sie Ihren vollständigen Code und erklären Sie, was Sie tun möchten. – RASG

+0

Ich möchte die Array-Länge drucken, aber ich bin nicht sicher, wo die console.log() -Methode enthalten ist. Ich habe ein DOM-Ereignis im obigen Code hinzugefügt, aber ich bekomme mehr Tags als die Array-Länge. d. h., ich erhalte die Tags, auch nachdem die Array-Länge angezeigt wurde. – user1275375

Antwort

0

Sieht aus wie Ihr Problem nicht mit Ihrem Code ist.
Sie wissen einfach nicht Javascript überhaupt.

Ich empfehle Ihnen dringend, mit einfachen Codes und Übungen beginnen.
Versuchen Sie, Ihr erstes Skript zu codieren.
Wenn Sie irgendwelche Zweifel über Ihre Code haben, fühlen Sie sich frei, darüber zu kommen und zu fragen.

Der Code, der Brock Adams gab dir funktioniert perfekt.
Ich habe es einfach in Greasemonkey kopiert.
Hier ist die Ausgabe:

enter image description here

Und bitte zurück zu Log a web page's dynamically-created tag attributes with a userscript und markiert seine Antwort als richtig gehen.

+0

Es gibt nichts falsch mit dem Code, auch wenn es perfekt für mich funktioniert, deshalb habe ich es eingefügt.Ich möchte die Anzahl der Tags dynamisch erstellt, deshalb habe ich Array hinzugefügt. Ich habe zuerst nur mit Skript-Tags versucht und wie kann ich wissen, dass das Array abgeschlossen ist und damit ich die Array-Länge drucken kann – user1275375

+1

Sehen Sie, was Sie getan haben? Dieser Text, den Sie gerade in den Kommentaren geschrieben haben, erklärt, was Sie wirklich wollen! Das sollte deine Frage sein, nicht dein Kommentar! Leute müssen wirklich lernen, wie man fragt ... – RASG

+0

Übrigens könnten Sie Brock Adams bitten, 'GetScriptAttributes.tagNum' zu ändern, um alle Umbauten zu zählen. – RASG