You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Greasemonkey更新后报GM_xmlhttpRequest未定义,脚本AJAX请求失败求助

解决你的Greasemonkey脚本AJAX问题

我来帮你拆解下问题所在,一步步搞定这两个核心问题:

1. 为什么会出现GM_xmlhttpRequest is not defined?

这是Greasemonkey 4.x版本更新后的API变动导致的——原来下划线命名的GM_xmlhttpRequest被替换成了驼峰式的GM.xmlHttpRequest(注意是点语法,不是下划线),而且不再挂载到全局对象上,必须通过GM对象调用。这就是更新后报错的核心原因。

2. AJAX请求为什么会失败?

你的请求URL用的是http://php.net/,但脚本匹配的是https://php.net/*的页面,浏览器会严格拦截混合内容请求(从HTTPS页面发起HTTP请求),直接把URL改成https://php.net/就能解决这个问题。

另外,你代码里的alert(responseDetails)其实意义不大,因为responseDetails是一个包含响应头、响应文本等信息的对象,alert只会显示[object Object],换成alert(responseDetails.responseText)或者用console.log(responseDetails)来查看完整数据,调试起来更方便。

修正后的完整脚本

// ==UserScript==
// @name _Starter AJAX request in GM, TM, etc.
// @match *://php.net/*
// @grant GM.xmlHttpRequest
// @connect php.net
// ==/UserScript==

GM.xmlHttpRequest({
    method: 'GET',
    url: 'https://php.net/',
    onload: function (responseDetails) {
        // 用console.log查看完整响应详情,调试更方便
        console.log('响应详情:', responseDetails);
        // 弹出响应文本的长度,验证请求成功
        alert('请求成功!响应文本长度:' + responseDetails.responseText.length);
    },
    // 加上错误回调,方便排查后续问题
    onerror: function(error) {
        console.error('请求出错:', error);
        alert('请求出错:' + error.error);
    }
});

额外小提示

如果想要同时兼容Tampermonkey(它还支持旧的GM_xmlhttpRequest)和Greasemonkey,可以加个简单的兼容判断:

// 自动适配不同脚本管理器的AJAX API
const gmXhr = typeof GM_xmlhttpRequest !== 'undefined' ? GM_xmlhttpRequest : GM.xmlHttpRequest;

gmXhr({
    // 你的请求配置项
});

内容的提问来源于stack exchange,提问作者Peter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:19:59