窗口加载未触发

window.onload is not fired

本文关键字:加载 窗口      更新时间:2023-09-26

我正在写一个用于练习的chrome扩展,它基本上是下次在网站上记住你的密码。但是,我在运行代码时遇到问题。window.onload,document.onload,它们都没有触发我的remember()函数。检查了其他答案,没有一个能帮上忙。检查它是否被网站中的实际代码覆盖,只有body.onload被覆盖。这是我的代码:

window.onload = remember;
var remember = function() {
    var name = localStorage["name"];
    var pw = localStorage["pw"];
    if(pw != undefined && name != undefined) 
    {
        document.sqrl.login_username.value = name;
        document.sqrl.secretkey.value = pw;
    };
    document.sqrl.onsubmit = function() {
        localStorage["name"] = document.sqrl.login_username.value;
        localStorage["pw"] = document.sqrl.secretkey.value;
    };
};

它执行前两行,但随后不会进入函数内部,因为我在 Chrome 中使用调试器对其进行了测试。我的代码中缺少什么?

在变量在作用域中声明/可见之前,您正在引用该变量。做

var remember = function() {
  ...
  ...
};
window.onload = remember;

相反。小提琴 -> http://jsfiddle.net/9pcL3jz3/

您有几个问题:

  • 在定义之前使用remember
  • 您的document.sqrl.login_username.valuedocument.sqrl.secretkey.value值取决于namepwnamepw依赖于localStorage值,而这些值又are set based on your document.sqrl在执行onsubmit之前objects. If you set document.sqrl.login_username.valuesqrl.secretkey.value其他地方,那么这实际上不是问题
  • 您尝试直接从localStorage访问"name""pw",我相信您不能这样做。请改用getItemsetItem函数

建议代码:

var remember = function() {
    var name = localStorage.getItem("name");
    var pw = localStorage.getItem("pw");
    if(pw != undefined && name != undefined) 
    {
        document.sqrl.login_username.value = name;
        document.sqrl.secretkey.value = pw;
    };
    document.sqrl.onsubmit = function() {
        localStorage.setItem("name", document.sqrl.login_username.value);
        localStorage.setItem("pw", document.sqrl.secretkey.value);
    };
};
window.onload = remember;

编辑:我已经阅读了Xan的评论,并在我的控制台中测试了以下代码:

localStorage["foo"] = "bar";

重新加载页面后,我检查了localStorage["foo"]的值,确实"bar"。因此,Xan 是对的,我的第三点确实无效。

试试这个?

 window.onload = remember;
    var remember = function() {
        var name = localStorage.name;
        var pw = localStorage.pw;
        if(pw !== undefined && name !== undefined) 
        {
            document.sqrl.login_username.value = name;
            document.sqrl.secretkey.value = pw;
        }
        document.sqrl.onsubmit = function() {
            localStorage.name = document.sqrl.login_username.value;
            localStorage.pw = document.sqrl.secretkey.value;
        };
    };