【问题标题】:document.onload not working for me?document.onload 不适合我?
【发布时间】:2013-09-23 13:43:21
【问题描述】:

我只是在玩 GreaseMonkey 的用户脚本,这只是我尝试做的一些简单的事情;

function test() {
document.getElementById('elementhere').innerHTML = 'test';
}
document.onload = test();

如果我转到我想使用它的页面并执行“运行”或“重新加载并运行”,它会起作用 - 但它不会自动运行,我试图通过使用 document.加载。

【问题讨论】:

    标签: javascript


    【解决方案1】:

    你需要的是:

    window.onload = function () {
    // do the work after everything was loaded (DOM, media elements)
    }
    

    document.onload 它不存在。如果您至少针对文档中的某些特定元素,它会起作用,例如:

    document.querySelector("img").onload = function ()
     {// do your thing after 'img' was loaded}
    

    如果你想在 DOM 是唯一准备好的元素而不等待媒体元素加载之后执行一些代码,你还有其他选择:

    • 导入一个异步脚本标签,用代码加载文件: 您可以将此标签放置在 DOM 中任何您想要的位置,它不会中断任何内容,将在 DOM 完成加载后加载。你应该去MDN documentation看看。

    • 如果您再次查看MDN documentation,他们会在 Notes 部分推荐您使用可由 addEventListener 处理的 DOMContentLoaded 和 DOMFrameContentLoaded 事件。所以,如果你这样做:

    document.addEventListener('DOMContentLoaded', handlerFunc);

    会为你工作。

    希望对你有帮助...

    【讨论】:

    • 应该被接受为正确答案。
    【解决方案2】:

    当您编写document.onload = test() 时,您是在调用test 函数,并将其返回值分配onload 处理程序。这显然不是你想要的。

    document.onload = test;
    

    这会将test 函数的引用分配onload 处理程序。当事件触发时,that 就是调用函数的时间。

    【讨论】:

      【解决方案3】:

      这是因为由于最后一行的括号 (),您分配了 test 函数的结果而不是函数本身。
      删除它们,它可能会起作用。

      如果没有,那么:

      显然这是设计使然。 [Chrome - v57]
      请改用document.addEventListener("DOMContentLoaded", <function_name>);

      见:Page lifecycle : DOMContentLoaded

      【讨论】:

        【解决方案4】:

        也许这样做:

        <body onload="test()">
        

        或者这不是您想要的?如果您想在没有上面的 HTML 位的情况下执行此操作,可以尝试用 window 替换文档:

        window.onload = function ()
        {
           document.getElementById('elementhere').innerHTML = 'test';
        } 
        

        因为这个,我会试一试:

        window.onload vs document.onload

        我知道发布指向链接的链接很糟糕,但你会明白我为什么这样做(希望如此)。

        干杯!

        【讨论】:

          【解决方案5】:

          不需要调用页面上的函数..只需要使用下面的代码,这是编码的最佳实践

          window.onload = function() {
              document.getElementById("txtCaptcha").value = code;
              document.getElementById("txtCaptchaDiv").innerHTML = code;
              }
          

          【讨论】:

            【解决方案6】:

            它正在工作,但你可以使用备用

            window.init = test;
            

            【讨论】:

              【解决方案7】:

              如果您使用的是 Greasemonkey,那么您实际上并不需要 using onload 事件,因为仅在触发 DOMContentLoaded 时才会调用 Greasemonkey 脚本。

              Greasemonkey 用户脚本中的代码在 DOMContentLoaded 事件触发(在 GM 0.8.6 的事件捕获期间)。它 是 Mozilla 实现的 DOM 事件,类似于 window.onload。 但是,由于它只等待 DOM 加载,而不是 整个页面(包括图像、样式表等)发生 早点。

              http://wiki.greasespot.net/DOMContentLoaded

              我认为您只需要在没有任何事件侦听器的情况下调用 test()

              【讨论】:

                【解决方案8】:

                你试过了吗?

                <body onload="test()">
                

                    $(document).ready(function test() {
                    document.getElementById('elementhere').innerHTML = 'test';
                    }
                

                【讨论】:

                  猜你喜欢
                  • 2010-10-09
                  • 1970-01-01
                  • 2011-08-11
                  • 2011-01-05
                  • 2011-12-23
                  • 2012-04-01
                  • 2011-05-02
                  • 2012-12-07
                  相关资源
                  最近更新 更多