document.readyState analog for gecko-based browsers

dom-events, domready, gecko, javascript

Solution

No, it's not possible. Sorry. But here's what you can do. If you can't test for stuff you want to be there before acting:

window.setTimeout(function () {
    // do your stuff here
}, 0);

(This will definitely do it after the page renders, but it might be after onload, not after DOMContentLoaded.)

If you do know how to test for what you're looking for:

(function () {
    if (/* test if what you're looking for is there */) {
        // do your stuff
    } else {
        window.setTimeout(arguments.callee, 0);
    }
})();

This will do it immediately, unless whatever you're looking for is not there, in which case it will wait until after the onload event.

Edit:

Check out this solution.

What it does is, in the edge cases, checks if the last element of document.getElementsByTagName("*") is undefined or not. And that seems to work for him, even in Opera.

Problem

IE has attribute `readyState` in document object, that indicates current state, e.g. "loading", "complete" etc. Is there any way to find current loading state of document in Mozilla-based browsers? I'm aware of `DOMContentLoaded` event, but it wont fit my situation, as my code can be executed after this event was fired. Added: no, I can't use any framework, and don't confuse with `.readyState` attribute of XHR object. And it's a bookmarklet, so it can be inserted in at any loading stage. Added later: Anyway, it looks like it's not a big issue for me. Because this attribute will be added in FF3.6, and it does not break things badly in Firefox, when you manipulate on unfinished DOM (unlike IE).

Original source