document.onload不适合我吗?

时间:2013-09-23 13:43:22

标签: javascript

好吧,我只是在玩GreaseMonkey的用户脚本,这里只是我试图做的简单事情;

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

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

8 个答案:

答案 0 :(得分:13)

您需要的是:

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);

会为你效劳。

我希望这对你有所帮助......

答案 1 :(得分:9)

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

document.onload = test;

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

答案 2 :(得分:3)

也许这样做:

<body onload="test()">

或者那不是你想要的?如果你想在没有上面的HTML位的情况下这样做,可以尝试用window替换document:

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

我会因此而放弃:

window.onload vs document.onload

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

干杯!

答案 3 :(得分:2)

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

如果没有,那么:

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

请参阅:Page lifecycle : DOMContentLoaded

答案 4 :(得分:2)

无需在页面上调用该功能..只需要使用以下代码,这是代码的最佳实践

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

答案 5 :(得分:0)

它正在运行,但您可以使用备用

window.init = test;

答案 6 :(得分:0)

如果您正在使用Greasemonkey,那么您实际上并不需要使用onload事件,因为只有在DOMContentLoaded被触发时才会调用Greasemoneky脚本。

  

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

http://wiki.greasespot.net/DOMContentLoaded

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

答案 7 :(得分:-1)

你试过这个吗?

<body onload="test()">

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