2009-05-13 5 views
3

Я пытаюсь установить данные в долговременной памяти в GreaseMonkey сценарии, за исключением того, что GM_setValue(), кажется, не в состоянии тихо:Greasemonkey + JQuery: с помощью GM_setValue() внутри функции обратного вызова события

$("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 

ответ

9

I подумайте, что это конкретная проблема безопасности Greasemonkey. См. 0.7.20080121.0 compatibility. GM не позволяет пользовательским страницам обращаться к API-интерфейсам GreaseMonkey, и это то, что вы там делаете (вы регистрируете обработчик кликов с JQuery, запущенным в пользовательском контексте). Обходной путь также указан на этой странице.

+0

Nice. Спасибо за хороший ответ. +1 –

+0

Умм, я смущен тем, почему они, похоже, думают, что это исправление безопасности помогло чему-нибудь? В основном, они не просто заполняют целостность системы безопасности, а затем сообщают всем, как ее взломать, и теперь нам нужно использовать запутанный код для этого. В любом случае, спасибо, что я собирался спросить, как вызвать GM_setValue() на веб-странице, и это всплыло, так что это избавило меня от неприятностей. – Jonathon

+0

Что я интересно, если это только работоспособное, потому что все значения предопределены, или это будет работать: 'unsafeWindow.someObject.registerCallback (функция (ключ, значение) { SetTimeout (функция (ключ, значение) { GM_setValue (ключ, значение) } 0) }); ' – Jonathon

0

Вы можете использовать это решение.

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

    //getValue 
    setTimeout(GM_getValue("foo"),0); 
}); 
+0

Хороший трюк, на самом деле. Хотя я думаю, что вы имели в виду/* setValue */и/* getValue * /, код, который вы опубликовали, на самом деле не выполнялся. ;) –

2

я имел такую ​​же проблему ...

Предыдущее решение не работает для меня, и я нашел решение, как это ...

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"); 
}); 
+0

Отлично, все еще работает для Greasemonkey 1.15 – berbt