我正在写一个用于练习的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中使用调试器对其进行了测试。我的代码中缺少什么?
发布于 2014-12-27 18:38:35
在作用域中声明/可见变量之前,您正在引用该变量。做
var remember = function() {
...
...
};
window.onload = remember;而不是。小提琴->
发布于 2014-12-27 19:05:47
您有几个问题:
remember之前使用document.sqrl.login_username.value和document.sqrl.secretkey.value值取决于name和pw,D9和D10取决于D11值,而D11值又取决于D12文档。turn D13和D14在onsubmit执行之前的其他地方,那么这实际上不是问题localStorage直接访问D18和"pw",我相信您不能这样做。使用getItem和setItem函数代替建议的代码:
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是对的,我的第三点确实是无效的。
发布于 2014-12-27 18:31:09
尝尝这个?
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;
};
};https://stackoverflow.com/questions/27666344
复制相似问题