GM_getValue未定义错误

时间:2013-04-15 12:19:25

标签: greasemonkey

在我的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() );

});
}

2 个答案:

答案 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();
}


但是,需要了解/考虑的另外两件事:

  1. 该错误消息(如果尚未编辑)表明该脚本未正确激活GM_getValueYou must set appropriate @grant values to use GM_ functions. EG:

    // @grant    GM_getValue
    // @grant    GM_setValue
    
  2. 您正在开始的方法:

    • 有错误 - 因此需要这个问题。
    • 您会发现可用性问题。
    • 没有便利或安全功能。
  3. 所以,不要在没有充分理由的情况下重新发明轮子。已经有经过验证的,更安全,功能齐全的框架可用于此类事情。 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);
});