"run_at": "document_end"
is the equivalent to DOMContentLoaded
. That is, it fires after the static HTML is loaded, but before slow images and slow finishing javascript.
So you cannot set a content script to fire after the page’s JS, just by setting the manifest alone. You must code for this in the content script itself.
For content scripts, "run_at": "document_end"
will fire before the onload
event (unlike the default document_idle
— which can fire at unpredictable times).
So, the first step is to wait for the load
event with code like this in your content script (searchTopic.js
):
window.addEventListener ("load", myMain, false);
function myMain (evt) {
// DO YOUR STUFF HERE.
}
In the case where the script you care about takes a while to finish, you will have to poll for some condition on a case-by-case basis. For example:
window.addEventListener ("load", myMain, false);
function myMain (evt) {
var jsInitChecktimer = setInterval (checkForJS_Finish, 111);
function checkForJS_Finish () {
if ( typeof SOME_GLOBAL_VAR != "undefined"
|| document.querySelector ("SOME_INDICATOR_NODE_css_SELECTOR")
) {
clearInterval (jsInitChecktimer);
// DO YOUR STUFF HERE.
}
}
}