- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是greasemonkey脚本的新手,我正在尝试使用GM_xmlhttpRequest发出POST请求,但成功后我的onload函数没有执行。
我知道 GM_ 函数不适用于注入(inject)的代码,因此我将它们导出到 unsafeWindow。
下面是我注入(inject)到页面中的代码(虽然代码很长,我只粘贴相关部分)。
function localGMCode(window, unsafeWindow) {
window.GMUtils = {
injectFunctionsIntoPage: function () {
var gmInjectFuncs = {
GMxmlhttpRequest: function(object) { return GM_xmlhttpRequest(object); },
};
if ((typeof createObjectIn !== 'undefined') && (typeof exportFunction !== 'undefined')) {
var injectedGM = createObjectIn(unsafeWindow, {defineAs: "unsafeObj"});
exportFunction(gmInjectFuncs.GMxmlhttpRequest, injectedGM, {defineAs: "GMxmlhttpRequest" });
return true;
}
return false;
},
GMxmlhttpRequest: function(object) {
console.log(object);
if (typeof GM_xmlhttpRequest !== 'undefined') {
return GM_xmlhttpRequest(object);
} else if (typeof iGraphHelperGM !== 'undefined') {
return iGraphHelperGM.GMxmlhttpRequest(object);
}
return null;
},
};
window.WikiSnapshot = {
uploadDataToS3: function(snapshotUrl , iGraphUrl) {
try {
setTimeout(function() {
GMUtils.GMxmlhttpRequest({
method : 'POST',
url: <some url>,
onload: function(response){
console.log("Inside onload of GM_xmlhttpRequest");
},
});
},0);
} catch (e) { console.log(e); }
},
};
}
在上面的代码中,当 GMxmlhttpRequest 完成时, onload 函数没有执行,(我已经尝试过 onerror , onreadystagechane 和其他回调函数,问题是其他的)。
下面是在页面中注入(inject)上述代码的代码。
function injectMainIGraphHelper() {
var script = document.createElement('script');
script.appendChild(document.createTextNode('(' + localGMCode + ');'));
(document.body || document.head).appendChild(script);
}
我在 Firefox 38.6.0、Greasemonkey 3.6 上运行如果需要更多信息来调试此问题,请告诉我。提前致谢...
最佳答案
您无法将 GM_api 注入(inject)页面并期望它会正常运行。因为所有 GM_api 都是在沙箱中实现的,在页面上下文中不可用。
你要么像任何常规页面脚本一样重写一个GM_api-free脚本(可能没有你想象的那么难,只有跨域XMLHttpRequest是GM独有的功能,所有其他GM_api将很容易实现,特别是我们得到了所有这些现在有 HTML5 功能。)
或者你让脚本在GM的沙箱中运行,这实际上可以完成大部分工作,你唯一不能做的就是像通常的方式修改页面上的对象或变量,你需要添加一个授予元 block :
那么假设页面中有一个变量A=1。
//@grant unsafeWindow
var usw=unsafeWindow||窗口;
console.log(usw.A);//1
关于javascript - GM_xmlhttpRequest 成功回调 'onload' 未执行注入(inject)代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35484925/
我正在使用以下优秀的用户脚本(适用于 Chrome、Chrome 的 Tampermonkey 和 Firefox Greasemonkey)。它应该在每个 IMDb 旁边显示电影评级电影链接,但无法
这个问题在这里已经有了答案: How to loop through GET/POST calls sequentially (waiting for previous) return? (1 个回
这个问题在这里已经有了答案: How can I handle multiple AJAX results in a userscript? (2 个答案) 关闭 7 年前。 我有一个相当简单的任务
如这里所示: How can I return a value from GM_xmlhttprequest? 我有一个异步脚本。我想将一个值传递给此函数,以便在调用 onload 函数时我可以使用它
我在这里有这个代码: var infiltrationResult; while(thisOption) { var trNode = document.createElement('tr')
我想得到一个 GM_xmlhttpRequest调用同步行为,但我无法让它像我期望的那样工作: function myFunction (arg) { var a; GM_xmlhtt
假设您正在访问一个名为“www.yourWebsite.com”的网站,并且您正在 Tampermonkey 中使用用户脚本从另一个网站获取信息。在本例中,您使用的是 GM_xmlhttpReques
如果我去this Google Maps page ,一些 HTML 在查看源代码中丢失,但在 Firebug 中显示。 同样,当将相同的 URL 传递给我的函数时,以下 HTML 不会显示在 res
我在表单上使用 JQuery.serializeArray() 在 GreaseMonkey 应用程序上创建对象数组: [ { name: a value: 1 }, {
简而言之,我不想将警报 URL 和响应主体发送到我的应用程序。此代码有效,但我不能使用 GM_xmlhttpRequest,除非我授予它。 不改变任何其他代码神奇地中断。我不确定更改了什么以及如何修复
我正在尝试让 GM_xmlhttpRequest 调用同步运行,但我无法让它按照我的预期工作: function myFunction (arg) { var a; GM_xmlhtt
我为 Greasemonkey 创建了一个基本脚本,以便在 Stack Overflow 上搜索单词 test。 根据GM_xmlhttpRequest documentation ,请求的参数应在
当我尝试在 chrome 中使用它来访问我编写的简单 API 时,它会抛出此错误: XMLHttpRequest cannot load http://67.19.91.186/~needsed/ap
我在以下用户脚本代码中收到 ReferenceError: // ==UserScript== // @name ... // @namespace ... // @desc
为什么这个简单的 Greasemonkey 脚本对我不起作用 https://jsfiddle.net/pghnsw8z/1/ ?我的意思是,在进行 ajax 调用时,我没有获得成功的响应,而是收到了
我正在度假,酒店的互联网连接价格太高了。 网络流量将被阻止,直到将有效的用户名/密码对发送到 http://an.internal.address/login使用 http post 请求。 但是,用
我希望我的带有 REST API 的应用能够以不同的方式访问: 来自同一域(此处使用普通 AJAX 请求) 通过站点所有者 (CORS) 附加的脚本从另一个域 通过用户脚本从另一个域 (GM_xmlh
我正在编写一个注入(inject)网页的用户脚本。该脚本从网络服务器读取一些数据,我想将消息发送到监听应用程序以对数据使用react。 现在,我所做的只是尝试向我的监听应用程序发送一个字符串命令,看看
我正在尝试使用 greasemonkey 检索页面,然后从中提取链接,将链接插入当前页面。我遇到了一些麻烦: GM_xmlhttpRequest({ method: "GET", url: "http
我在 Greasemonkey 中遇到表单问题。我想使用 GM_xmlhttpRequest 发送一个 bool 值,但如果我发送: GM_xmlhttpRequest({ method: "PO
我是一名优秀的程序员,十分优秀!