After reviewing @hugronaphor's answer. In particular [this link][1] along with some jQuery 3.x discussions regarding changes to the ready and load events my final solution was in fact to remove my code from ```Drupal.behaviours```. In the end I have implemented code in the following style: (function ($, Drupal){ $(window).on("load",function() { //Do something }); })(jQuery, Drupal); This gave me reliable access to the ```.on("load")``` event again which is what I was after as I need the entire page to be loaded before I trigger the script. As my script is relatively simple and doesn't need further context information I think this is fine for my use case. I "think" the issue is related to the [following change][2] in jQuery 3.x where ```on("load")``` is not guaranteed to fire inside a ```$(Document).ready``` state any more - which is what ```Drupal.behaviours``` is giving you. I am something of a js noob though so will leave it to smarter people to explain why this may or may not be the case. If there is a better answer I would like to hear it. For my simple case not being in the ```Drupal.behaviour``` has solved my issue. [1]: https://www.lullabot.com/articles/understanding-javascript-behaviors-in-drupal [2]: https://github.com/jquery/jquery/issues/3194