greasemonkey:从eval执行GM_xmlhttpRequest()(跟进)

时间:2010-04-13 08:39:59

标签: ajax greasemonkey cross-domain

如何在GM_xmlhttpRequesteval内拨打evalGM_xmlhttpRequest一些复杂的代码,其中一些代码调用// ==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);

这是Perform GM_xmlhttpRequest() from eval

的后续行动

以下是一些示例代码:

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

输出:

setTimeout(fetch,0)

所以唯一有效的提取是code,但我需要实际执行包含复杂代码的{{1}}。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

因为我有同样的问题,几个月后,他们似乎没有答案。

如果您只想在一台计算机上或在开发环境中运行此代码,您可以考虑更改Greasmonkey Addon源: 那里只有两个字母:“//” 在components / 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 
  }

但请小心,因为你的恶意脚本会出现安全问题。