如何在GM_xmlhttpRequest
内eval
内拨打eval
来GM_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}}。
有什么想法吗?
答案 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
}
但请小心,因为你的恶意脚本会出现安全问题。