[英]document.onload not working for me?
好吧,我只是在玩 GreaseMonkey 的用户脚本,这只是我尝试做的一些简单的事情;
function test() {
document.getElementById('elementhere').innerHTML = 'test';
}
document.onload = test();
如果我转到要使用它的页面并执行“运行”或“重新加载并运行”,它会起作用 - 但它不会自动运行,我试图通过使用 document.onload 来实现。
你需要的是:
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 文档。
如果您再次查看MDN 文档,他们会在注释部分建议您使用可由 addEventListener 处理的 DOMContentLoaded 和 DOMFrameContentLoaded 事件。 所以,如果你这样做:
document.addEventListener('DOMContentLoaded', handlerFunc);
会为你工作。
我希望这对你有帮助......
当您编写document.onload = test()
,您正在调用test
函数,并将其返回值分配给onload
处理程序。 这显然不是你想要的。
document.onload = test;
这会将test
函数的引用分配给onload
处理程序。 当事件触发,那就是当你的函数将被调用。
这是因为由于最后一行的括号()
,您正在分配test
函数的结果而不是函数本身。
删除它们,它可能会起作用。
如果没有,那么:
显然这是设计使然。 [ Chrome - v57
]
使用document.addEventListener("DOMContentLoaded", <function_name>);
反而。
也许这样做:
<body onload="test()">
或者这不是你要找的? 如果您想在没有上面的 HTML 位的情况下执行此操作,可以尝试用窗口替换文档:
window.onload = function ()
{
document.getElementById('elementhere').innerHTML = 'test';
}
因为这个,我会试一试:
window.onload 与 document.onload
我知道发布链接的链接是蹩脚的,但你会明白我为什么这样做(希望如此)。
干杯!
不需要调用页面上的函数..只需要使用下面的代码,这是编码的最佳实践
window.onload = function() {
document.getElementById("txtCaptcha").value = code;
document.getElementById("txtCaptchaDiv").innerHTML = code;
}
它的工作,但你可以使用替代
window.init = test;
如果您使用的是 Greasemonkey,那么您实际上并不需要 using onload 事件,因为只有在DOMContentLoaded
被触发时才会调用 Greasemonky 脚本。
Greasemonkey 用户脚本中的代码在 DOMContentLoaded 事件触发时被调用(在 GM 0.8.6 的事件捕获期间)。 它是一个由 Mozilla 实现的 DOM 事件,类似于 window.onload。 然而,因为它只等待 DOM 加载,而不是整个页面(包括图像、样式表等),所以它发生得更快。
http://wiki.greasespot.net/DOMContentLoaded
我认为您只需要在没有任何事件侦听器的情况下调用test()
即可。
你试过这个吗?
<body onload="test()">
要么
$(document).ready(function test() {
document.getElementById('elementhere').innerHTML = 'test';
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.