I am working on a small Greasemonkey script to speed up some processes in a vendor's tool that is written in angularJS.
The issue I seem to be facing is that the element is not in the DOM when the script runs:
$(document).ready(function() {
  var pwEl = $("input:password").val(chance.word({length: 8});
};
fails because the input field does not seem to be present when (document).ready() runs. There have been a few resources that seem to confirm this.
Is there a way that I can wait for Angular to finish before running my script? I have found references to using:
angular.element(document).ready(function() {
  console.log("Hi from angular element ready");
});
However, this never seems to execute either.
I'm really new to Angular (I've only played around with a few short tutorials). Any direction is appreciated.
Thank you!
Wait for the element to actually be added by using timers, MutationObserver, or a utility like waitForKeyElements().
Here's a complete Greasemonkey script showing one way:
// ==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");
}
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With