簡體   English   中英

document.onload 對我不起作用?

[英]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>); 反而。

請參閱:頁面生命周期:DOMContentLoaded

也許這樣做:

<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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM