Greasemonkey + jQuery: using GM_setValue() within

2019-07-06 11:43发布

I'm trying to set data in long-term storage in a GreaseMonkey script, except that GM_setValue() seems to fail silently:

$("a#linkid").click(function()
{
    GM_setValue("foo", 123); // doesn't work, but does not generate error
});

GM_setValue("bar", 123); // works properly, value is set

3条回答
【Aperson】
2楼-- · 2019-07-06 12:26

I had the same kind of problem...

Previous solution was not working for me and I found solution like this...

function gmGet(name) {
    var theValue = GM_getValue(name);
    return theValue;
}

function gmSet(name, valuee) {
    GM_setValue(name, valuee);
}

$("a#linkid").click(function(){
    //setValue
    gmSet("foo", 123);

   //getValue
   gmGet("foo");
});
查看更多
ら.Afraid
3楼-- · 2019-07-06 12:26

You can use this solution.

$("a#linkid").click(function()
{
    //setValue
    setTimeout(GM_setValue("foo", 123),0);

   //getValue
   setTimeout(GM_getValue("foo"),0);
});
查看更多
贼婆χ
4楼-- · 2019-07-06 12:39

I think this is a specific Greasemonkey security issue. Please see 0.7.20080121.0 compatibility. GM does not allow user pages to call GreaseMonkey APIs, and that's what you're doing there (you're registering a click handler with JQuery running in the user context). A workaround is also given on that page.

查看更多
登录 后发表回答