17

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

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

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

4

8 回答 8

25

你需要的是:

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

会为你工作。

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

于 2017-07-10T19:33:58.817 回答
13

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

document.onload = test;

这会将对该函数的引用分配给处理程序。当事件触发时您的函数将被调用。testonload

于 2013-09-23T13:47:46.183 回答
4

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

如果没有,那么:

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

请参阅:页面生命周期:DOMContentLoaded

于 2017-04-10T03:40:17.073 回答
3

也许这样做:

<body onload="test()">

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

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

因为这个,我会试一试:

window.onload 与 document.onload

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

干杯!

于 2013-09-23T13:53:45.747 回答
2

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

window.onload = function() {
    document.getElementById("txtCaptcha").value = code;
    document.getElementById("txtCaptchaDiv").innerHTML = code;
    }
于 2017-06-10T10:55:43.963 回答
0

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

window.init = test;
于 2013-09-23T13:49:22.230 回答
0

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

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

http://wiki.greasespot.net/DOMContentLoaded

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

于 2013-09-23T13:57:08.250 回答
-1

你试过这个吗?

<body onload="test()">

或者

    $(document).ready(function test() {
    document.getElementById('elementhere').innerHTML = 'test';
    }
于 2013-09-23T13:51:51.887 回答