2016-04-25 16 views
1

Ich arbeite an einem kleinen Greasemonkey-Skript, um einige Prozesse in einem Herstellerwerkzeug zu beschleunigen, das in angularJS geschrieben ist.DOM-Elemente in Angular JS in Greasemonkey ändern

Die Frage, die ich scheine ist gerichtet zu sein, dass das Element nicht in dem DOM ist, wenn das Skript ausgeführt wird:

$(document).ready(function() { 
    var pwEl = $("input:password").val(chance.word({length: 8}); 
}; 

schlägt fehl, da das Eingabefeld vorhanden nicht zu sein scheint, wenn (document) .ready () läuft. Es hat einige Ressourcen gegeben, die dies zu bestätigen scheinen.

Gibt es eine Möglichkeit, dass ich auf die Ausführung von Angular warten kann, bevor mein Skript ausgeführt wird? Ich habe Referenzen zur Verwendung gefunden:

angular.element(document).ready(function() { 
    console.log("Hi from angular element ready"); 
}); 

Allerdings scheint dies auch nie auszuführen.

Ich bin wirklich neu zu Angular (Ich habe nur mit ein paar kurzen Tutorials herum gespielt). Jede Richtung wird geschätzt.

Vielen Dank!

+0

Ich glaube, du bist für den Code suchen hier detailliert beschrieben. [Sende Event, als angular.js fertig geladen wurde] (http://stackoverflow.com/questions/14968690/sending-event-when-angular-js-finished-loading) –

+0

Es gibt keinen guten Weg, auf den ich auf Angular warten kann finish 'außer lame 'setTimeout (..., 5000)', weil die Angular-App das Laden zu einem bestimmten Zeitpunkt nicht beendet. Der Zeitpunkt, zu dem die Elemente "input: password" angezeigt werden, hängt davon ab, wie die Direktiven, die sie erstellen, funktionieren. Der beste Weg besteht darin, den Angular-Bootstrapping-Prozess zu hacken und App-Services zu dekorieren. – estus

Antwort

1

Warten Sie, bis das Element tatsächlich mithilfe von Timern, MutationObserver oder einem Dienstprogramm wie waitForKeyElements() hinzugefügt wurde.

ist die komplette Greasemonkey-Skript eine Art und Weise zeigt:

// ==UserScript== 
// @name  _Process nodes after Angular adds them 
// @match http://YOUR_SERVER.COM/YOUR_PATH/* 
// @require http://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js 
// @require https://gist.github.com/BrockA/2625891/raw/waitForKeyElements.js 
// @grant GM_addStyle 
// ==/UserScript== 
//- The @grant directive is needed to restore the proper sandbox. 

waitForKeyElements ("input:password", actOnNode); 

function actOnNode (jQueryNode) { 
    //--- Do whatever you need to on individual nodes here: 
    // For example: 
    jQueryNode.css ("background", "orange"); 
}