如何在第一页加载时执行JavaScript函数?

Col*_*lin 14 javascript

我想知道是否有一种方法只在第一次页面加载时执行一次JavaScript函数,然后在任何后续重新加载时不执行.

有没有办法可以做到这一点?

Scr*_*t47 32

一旦onload事件触发,下面的代码将执行.该语句检查if一次性功能已经被通过使一个标志(在使用前执行hasCodeRunBefore),然后将其存储在localStorage.

window.onload = function () {
    if (localStorage.getItem("hasCodeRunBefore") === null) {
        /** Your code here. **/
        localStorage.setItem("hasCodeRunBefore", true);
    }
}
Run Code Online (Sandbox Code Playgroud)

注意:如果用户localStorage以任何方式清除其浏览器,则该函数将再次运行,因为flag(hasCodeRunBefore)将被删除.

好消息...

由于运算符和冗长的函数名称,使用可能很繁琐.我创建了一个基本模块来简化这个,所以上面的代码将替换为:localStorage

window.onload = function () {
    if (!ls.exists('has_code_run_before')) {
        /** Your code here... **/
        ls.set.single('has_code_run_before', true);

        /** or... you can use a callback. **/
        ls.set.single('has_code_run_before', true, function () {
           /** Your code here... **/ 
        });
    }
};
Run Code Online (Sandbox Code Playgroud)

更新#1

根据@PatrickRoberts评论,你可以使用in运算符来查看localStorage中是否存在变量键,所以

if (localStorage.getItem('hasCodeRunBefore') === null)
Run Code Online (Sandbox Code Playgroud)

if (!('hasCodeRunBefore' in localStorage))
Run Code Online (Sandbox Code Playgroud)

并且更简洁,更清洁.

其次,您可以像设置对象(localStorage.hasCodeRunBefore = true)一样设置值,尽管它将作为字符串存储,而不是布尔值(或者您的值是什么数据类型).

  • `!'foo' in {}` vs. `!('foo' in {})` (2认同)