It seems there is no way to have scripts run after everything else. Normally I’d use window.onload or similar things, but all that’s been and gone by the time any script is run anyway. So I tried defer. Normally defer means that script will run after non-defer scripts. That would be useful, but the defer attribute isn’t heeded by the engine, currently.

https://perchance.org/085unhhfqe#edit

For now I’m going to try using a [code block] just to have it run later. But obviously that won’t be sufficient for all situations. So it still would be useful to have some callback or addEventListener thingy to use to run code after perchance has done everything it does.

  • @perchanceM
    link
    English
    1
    edit-2
    1 month ago

    Thanks! Fixed. Note though RE your example generator, the defer attribute is not valid for ‘inline’ scripts - it’s only valid for URL/remote scripts (i.e. using src attribute instead of writing text between the opening and closing script tags). Here are some options for running code after everything else has executed:

    • document.addEventListener("DOMContentLoaded", function() { yourCodeHere }) - this is usually your best option (and by coincidence was already supported, since Cocell reported a similar issue a week or so ago)
    • window.addEventListener("load", function() { yourCodeHere }) - same as window.onload = function() { yourCodeHere } but addEventListener a much better approach because it doesn’t overwrite the onload function that might have been set by some other code (e.g. if you’re writing a plugin, you might overwrite the importer’s onload function that they set). With the addEventListener approach you can add as many as you want. But in general using window’s load event isn’t desirable because it also waits for stuff like images to finish loading before triggering. But if that’s what you want, then use this.
    • As you mentioned, you can put a square block at the end of the HTML panel like [ yourCodeHere ], but note that this will run again after every update(). If you only want it to run once, you’d have to write something like [doneStuffAlready ? "" : doStuff(), doneStuffAlready=true]
    • @wthit56OP
      link
      English
      11 month ago

      Oooooh, okay. Honestly, while I’ve been in web dev a while, I’ve never really needed or used defer, so never really looked into it properly; I just know it exists. That’s an annoying caveat isn’t it? 😅

      I thought I’d tried onload–that was the first thing I tried–but it didn’t work. I’ll try these things again and nail down exactly what does and doesn’t work for myself.

      • @perchanceM
        link
        English
        1
        edit-2
        1 month ago

        I thought I’d tried onload

        Yep you’re not imagining it - by “Thanks! Fixed” I meant that I fixed both defer and the window load event. DOMContentLoaded was the only thing that was working properly before this bug report.

          • @perchanceM
            link
            English
            1
            edit-2
            1 month ago

            Seems to be working fine for me in both cases - i.e. I see “loaded” alert when I load the page with and without #edit at the end of the URL. Can you give more details? I’ve tested in Chrome and Firefox.

            • @wthit56OP
              link
              English
              130 days ago

              I’m on Chrome. 126.0.6478.214 (Official Build) (64-bit)

              For me, it only alerts when I click Reload or click Auto. Doesn’t alert when I open the editing page. Doesn’t alert when I go to the main page. https://imgur.com/a/jEv8ZS5

              • @perchanceM
                link
                English
                1
                edit-2
                30 days ago

                Hmm, I’m not sure what’s going on there. Can’t seem to replicate. Which OS? I tested on Ubuntu, Windows, and an old Chromebook.

                Can you try swapping it for a console.log instead of alert? I figure there’s a small chance that it’s a ‘user agent intervention’ where it hides the alert due to it seeming like a spammy thing.

                • @wthit56OP
                  link
                  English
                  130 days ago

                  Chromebook. Same issue for console.log(). And debugger.

                  I guess you’re manually running it somehow?

        • @wthit56OP
          link
          English
          11 month ago

          Ah okay great 👍

        • @wthit56OP
          link
          English
          11 month ago

          Can confirm, the load even works for me now 👍