Comment pouvez-vous appeler GM_xmlhttpRequest
à l'intérieur d'un eval
où vous êtes eval
ing un code complexe, dont certains appels GM_xmlhttpRequest
.Greasemonkey: effectuer GM_xmlhttpRequest() de eval (suivi)
Ceci est un suivi de Perform GM_xmlhttpRequest() from eval
Voici quelques exemples de code:
// ==UserScript==
// @name Test GM AJAX
// ==/UserScript==
console = unsafeWindow.console;
function fetch(msg) {
console.log('fetching: '+msg);
GM_xmlhttpRequest({
method: 'GET',
url: 'http://google.com',
onload: function(responseDetails) {
console.log(msg);
}
});
}
function complicated(arg1, arg2) {
fetch(arg1 + arg2);
}
console.log('trying');
var code = 'complicated("Ya", "y!")';
function myEval(code) {
eval(code);
eval('setTimeout(function(){'+code+'},0)');
eval('setTimeout(fetch,0)');
eval('setTimeout(function(){console.log("here");fetch("cool")},0)');
fetch("BOO");
}
myEval(code);
qui sort:
trying
fetching: Yay!
fetching: BOO
fetching: Yay!
fetching: 30
here
fetching: cool
BOO
30
La seule FETCH travaillé était le setTimeout(fetch,0)
mais j'ai besoin pour exécuter réellement le code
qui comprend un code compliqué.
Des idées?
Pourriez-vous justifier votre raison d'utiliser 'eval'? Par expérience, je peux dire qu'il existe une alternative dans 99,7% des cas. "J'ai du code compliqué" n'est pas une justification. –
Je construis un système de plugin, où tous les plugins sont de petits morceaux de javascript stockés sur le serveur, et envoyés au client pour être exécutés. Chaque plugin peut appeler dans la bibliothèque client pour effectuer certaines actions. Existe-t-il un meilleur moyen que 'eval()' pour les systèmes de plugins? –
Je suppose que cela pourrait tomber dans l'autre 0,3%. –