greasemonkey: выполнить GM_xmlhttpRequest () из eval (продолжение) - PullRequest
0 голосов
/ 13 апреля 2010

Как вы можете позвонить GM_xmlhttpRequest внутри eval, где вы eval вводите какой-то сложный код, некоторые из которых вызывают GM_xmlhttpRequest.

Это продолжение до Выполнить GM_xmlhttpRequest () из eval

Вот пример кода:

// ==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);

который выводит:

trying
fetching: Yay!
fetching: BOO
fetching: Yay!
fetching: 30
here
fetching: cool
BOO
30

Таким образом, единственной сработавшей выборкой был setTimeout(fetch,0), но мне нужно на самом деле выполнить code, который включает в себя сложный код.

Есть идеи?

1 Ответ

1 голос
/ 06 декабря 2010

, поскольку у меня та же проблема, всего несколько месяцев спустя, и кажется, что ответа там нет.

Если вы хотите запускать этот код только на одном компьютере или в среде разработки, как я, вы можете изменить исходный код дополнения Greasmonkey: Там только две буквы: "//" в компонентах / greasemonkey.js, строка 47 ff

 if (stack.filename != null &&
      stack.filename != gmSvcFilename &&
      stack.filename.substr(0, 6) != "chrome") {
    GM_logError(new Error("Greasemonkey access violation: unsafeWindow " +
                "cannot call " + apiName + ". --> DISABED"));
    // return false;  OUT-COMMENT THIS LINE 
  }

Но будьте осторожны, поскольку у вас могут возникнуть проблемы с безопасностью при использовании скриптов mal.

...