簡體   English   中英

是否可以使 body onload 事件更快?

[英]Is it possible to make body onload event faster?

我有這段代碼可以在頁面加載時自動提交表單,但是在頁面完全加載后需要 20 秒才能完成提交。

我在這里做錯了什么嗎? 如果不是,如何繞過那 20 秒的延遲? 我們可以讓 body onload事件更快嗎?

代碼:

<html>
<body onload="document.forms['loginform'].submit();">
<form id="loginform" name="loginform" action="https://login.url.com" method="post" style="visibility:hidden">
    <input type="hidden" value="" name="hhh">
    <input type="text" value="username" id="login_field" name="username">
    <input type="password" value="pass" id="password_field" name="password">
                <input type="hidden" value="" id="password_strength" name="password_strength">
                <input type="hidden" value="/index.php" id="sendto" name="sendto">
    <button id="btn_logon" type="submit"><span>Login</span></button>
        </form>
</body>
</html>

頁面的所有依存關系(圖像,外部資源等)均已加載后,將觸發load事件。 您應該注意的事件是在DOM准備就緒時觸發的事件DOMContentLoaded (已在HTML5中標准化)。

對於跨瀏覽器解決方案,請從任何現有的JavaScript庫(例如MooTools,jQuery,Dojo等)中選擇一種實現。

鏈接包含一個實現。 如果您的DOM內容太大,並且下載和解析僅花費時間,那么請考慮在<form>本身之后添加腳本。

<form id="loginform" name="loginform" action=".." method="post">
...
</form>
<script>
    // submits the form right after it is parsed
    document.forms['loginform'].submit();
</script>

正如Anurag 提到的, DOMContentLoaded事件會更好,因為它“不會等待圖像、子幀和異步腳本等其他內容完成加載”( MDN )。

要在您的代碼中實現這一點,您應該從<body>標記中刪除onload屬性,而是使用以下代碼:

<script>
addEventListener("DOMContentLoaded", () => document.forms['loginform'].submit());
</script>

或者,更好的是,通過 id 獲取表單:

<script>
addEventListener("DOMContentLoaded", () => document.getElementById("loginform").submit());
</script>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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