0

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

});
}
4

2 回答 2

7

GM_getValue不返回数组并且没有length属性。如果未设置该值,则
该函数返回。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_getValue正确激活。您必须设置适当@grant的值才能使用GM_函数。例如:

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

    • 有错误——因此需要这个问题。
    • 有你会发现的可用性问题。
    • 没有便利或安全功能。

所以,不要在没有充分理由的情况下重新发明轮子。对于这类事情,已经有经过验证的、更安全、功能齐全的框架。 这是一个很好的。

于 2013-04-15T23:18:38.960 回答
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);
});
于 2013-04-15T14:54:55.497 回答