2013-09-23 29 views
0

嗯,我只是玩GreaseMonkey的用戶腳本,這裏只是我試圖做的一些簡單的事情;document.onload不適合我?

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

它的工作原理,如果我去我想在對它進行使用「運行」或「重裝&運行」的頁面 - 但它不會自動運行,這我試圖讓它做通過使用document.onload。

+1

注:也許應該是'window.onload'(http://stackoverflow.com/a/5135719)。 –

+0

可能重複的[window.onload不工作的非常簡單的頁面](http://stackoverflow.com/questions/18369255/window-onload-not-working-for-very-simple-page) –

回答

8

當你寫document.onload = test(),你是調用test功能,分配其返回值的onload處理程序。這顯然不是你想要的。

document.onload = test; 

這將分配test功能的參考onload處理程序。當事件觸發時,是你的函數被調用的時候。

0

它的工作,但你可以使用備用

window.init = test; 
-1

你嘗試呢?

<body onload="test()"> 

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

也許這樣做:

<body onload="test()"> 

或者是不是你想要的?如果你想這樣做沒有HTML位之上,也許嘗試與窗口替換文件:

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

我會給因爲這個一展身手:

window.onload vs document.onload

我知道發帖一個鏈接的鏈接是蹩腳的,但你會明白我爲什麼這樣做(希望)。

乾杯!

0

如果您使用的是Greasemonkey,那麼您並不需要使用onload事件,因爲Greasemoneky腳本僅在DOMContentLoaded被觸發時纔會被調用。

在Greasemonkey的用戶的腳本代碼被調用時 DOMContentLoaded事件觸發(事件捕獲期間爲GM 0.8.6的)。它是 是Mozilla實現的一個DOM事件,類似於window.onload, 但是,由於它只等待DOM加載,而不是整個頁面(包括圖像,樣式表等)加載,因此它會更快地發生 。

http://wiki.greasespot.net/DOMContentLoaded

我想你只需要調用test()沒有任何事件偵聽器。

+0

嗯,我已經試圖,但它不起作用。我必須點擊「運行」或「重新加載並運行」才能真正更改HTML。 :/ – prk

+0

@WoopWoopWoopWoop:「run」是做什麼的? – Shubham

+0

它只是運行userscript。 – prk

1

這是因爲你在分配test函數的結果而不是函數本身,因爲最後一行的括號爲()
刪除它們,它可能會工作。

如果不是那麼:

顯然這是設計。 [Chrome - v57]
改爲使用document.addEventListener("DOMContentLoaded", <function_name>);

參見:Page lifecycle : DOMContentLoaded

1

不需要調用頁面上的功能..只是你需要使用下面的代碼是coading

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

你需要什麼的最佳做法是:

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再看看他們會建議你在第注意使用可通過的addEventListener被處理DOMContentLoaded和DOMFrameContentLoaded事件。所以,如果你這樣做:

document.addEventListener('DOMContentLoaded',handlerFunc);

會爲你工作。

我希望這能對你有所幫助......