在我的greasemonkey脚本中,我想检查GM值:用户名和密码是否设置,但是当我尝试以下代码时,它会给我回错:
TypeError: GM_getValue(...) is undefined
...f (GM_getValue ("username").length == 0 + GM_getValue ("password").length == 0 )
代码:
if (GM_getValue ("username").length == 0 + GM_getValue ("password").length == 0 ){
var username = $('input[name=username]');
var password = $('input[name=password]');
//Username en Password in Firefox zetten met GM_setValue
$(".button").click(function(){
GM_setValue ("username", username.val() );
GM_setValue ("password", password.val() );
});
}
答案 0 :(得分:7)
GM_getValue
does not return an array and does not have a length
property.
如果未设置该值,则该函数返回undefined
。正在尝试检查的正确方法是:
var uName = GM_getValue ("username", "");
var pWord = GM_getValue ("password", "");
if ( ! uName && ! pWord) {
uName = $('input[name=username]').val();
pWord = $('input[name=password]').val();
}
该错误消息(如果尚未编辑)表明该脚本未正确激活GM_getValue
。 You must set appropriate @grant
values to use GM_
functions. EG:
// @grant GM_getValue
// @grant GM_setValue
您正在开始的方法:
所以,不要在没有充分理由的情况下重新发明轮子。已经有经过验证的,更安全,功能齐全的框架可用于此类事情。 Here's a good one.
答案 1 :(得分:0)
首先,我不确定你是否可以像这样直接检查函数返回值的长度。其次,你绝对不应该添加这样的布尔值,你需要布尔 - 运算符&&
而不是+
。尝试这样的事情:
var username = GM_getValue("username");
var password = GM_getValue("password");
if ((username.length == 0) && (password.length == 0)) {
username = $('input[name=username]').val();
password = $('input[name=password]').val();
}
$(".button").click(function(){
GM_setValue ("username", username);
GM_setValue ("password", password);
});