“0延时”跳转通常指的是用户看到提示信息后,不等待任何时间,立即或几乎是立即进行跳转,这可以通过修改 showmsg.php 文件来实现。

核心原理
showmsg.php 页面的跳转功能是通过 JavaScript 的 setTimeout() 函数实现的。setTimeout() 会设置一个定时器,在指定的毫秒数后执行跳转代码,要实现“0延时”,我们只需要将这个定时器的延时时间设置为 0 即可。
直接修改 showmsg.php 文件 (最直接、最彻底的方法)
这是最常用且最有效的方法,它会作用于所有使用 ShowMsg() 函数的地方。
-
找到文件 登录你的网站后台,通过 FTP 或主机文件管理器,找到并打开以下文件:
/include/common.func.php注意:有些版本的 DedeCMS 可能会将
showmsg相关的代码直接放在这个公共函数文件里。
(图片来源网络,侵删) -
定位函数代码 在
common.func.php文件中,搜索function ShowMsg关键字,找到ShowMsg()函数的定义,它看起来通常是这样的:/** * 通用提示信息跳转 * * @param string $msg 提示信息 * @param string $gourl 跳转地址 * @param int $ddelay 跳转等待时间,单位:秒 * @param string $gotype 跳转方式 (0:header, 1:javascript) * @return void */ function ShowMsg($msg, $gourl, $ddelay = 0, $gotype = 0) { if (emptyempty($gourl)) { $gourl = "javascript:history.go(-1);"; } $htmlhead = "<html>\r\n<head>\r\n<title>提示信息</title>\r\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset={dede:global.cfg_soft_lang/}\" />\r\n"; $htmlhead .= "<base target='_self' />\r\n"; $htmlhead .= "<style>body{font-size:12px;font-family:Arial, Helvetica, sans-serif;background-color:#FFFFFF;margin-top:50px;}a{color:#0066CC;text-decoration:underline;}a:hover{color:#000000;text-decoration:none;}</style>\r\n"; $htmlhead .= "</head>\r\n<body>\r\n<center>\r\n<script>\r\n"; $htmlfoot = "</script>\r\n</center>\r\n</body>\r\n</html>"; $litime = ($ddelay > 0) ? $ddelay * 1000 : 1000; // 将秒转换为毫秒,默认为1秒 if ($gotype == 0) { $htmlhead .= "var pgo, rat, inter, load;\n"; $htmlhead .= "function JumpUrl(url)\n"; $htmlhead .= "{\n"; $htmlhead .= " location.href=url;\n"; $htmlhead .= "}\n"; $htmlhead .= "pgo=0;\n"; $htmlhead .= "function ShowMsg(msg,url)\n"; $htmlhead .= "{\n"; $htmlhead .= " document.write('<br>'+msg+'<br><br>');\n"; $htmlhead .= " document.write('<a href='+url+'>如果你的浏览器没有自动跳转,请点击这里</a><br>');\n"; $htmlhead .= " pgo=1;\n"; $htmlhead .= " inter = setInterval('JumpUrl(\''+url+'\')',".$litime.");\n"; $htmlhead .= "}\n"; $htmlhead .= "document.write('<br><br><b>系统提示:</b><br>'+unescape('".rawurlencode($msg)."')+'<br><br>');\n"; $htmlhead .= "ShowMsg('".rawurlencode($msg)."','".$gourl."');\n"; $htmlhead .= "load=1;\n"; $htmlhead .= "</script>\r\n"; } else { $htmlhead .= "document.write('<br><br><b>系统提示:</b><br>'.$msg+'<br><br>');\n"; $htmlhead .= "document.write('<a href='.$gourl.'>如果你的浏览器没有自动跳转,请点击这里</a>');\n"; $htmlhead .= "setTimeout(\"location.href='".$gourl."'\",".$litime.");\n"; } echo $htmlhead.$htmlfoot; exit(); } -
修改延时时间 在上面的代码中,找到这一行:
$litime = ($ddelay > 0) ? $ddelay * 1000 : 1000; // 将秒转换为毫秒,默认为1秒
这里的逻辑是:如果调用
ShowMsg时传入了$ddelay参数(大于0),就使用这个值;否则,默认等待 1000毫秒(即1秒)。要实现“0延时”,我们需要修改这个默认值,将其改为
0即可:
(图片来源网络,侵删)// 修改前 $litime = ($ddelay > 0) ? $ddelay * 1000 : 1000; // 修改后 (实现0延时) $litime = ($ddelay > 0) ? $ddelay * 1000 : 0;
-
保存文件 保存修改后的
common.func.php文件。
效果:
无论你在哪里调用 ShowMsg() 函数,如果没有明确指定 $ddelay 参数,页面将不会等待,直接执行跳转。
在调用 ShowMsg 时指定延时为 0 (灵活控制)
如果你只是想让某些特定页面实现0延时跳转,而不是全局修改,可以在调用 ShowMsg() 函数时,将第三个参数 $ddelay 设置为 0。
在某个PHP处理文件中,你可能会这样写:
// 假设这是你的处理逻辑
if (操作成功) {
ShowMsg('操作成功!', 'success.php', 3); // 等待3秒后跳转
} else {
ShowMsg('操作失败!', 'error.php', 0); // 立即跳转,0延时
}
在这种情况下,只有“操作失败”的提示会立即跳转,而“操作成功”的提示仍会等待3秒。
纯前端修改 (不推荐,仅作了解)
这种方法不修改PHP文件,而是通过浏览器控制台临时生效,刷新页面后失效,不适用于生产环境。
- 在浏览器中打开一个使用
ShowMsg的页面。 - 按
F12打开开发者工具,切换到“控制台” (Console) 标签页。 - 在控制台中输入以下代码并回车:
// 找到并清除所有正在等待的定时器 for (let i = 1; i < 1000; i++) { clearInterval(i); clearTimeout(i); } // 强制页面跳转到首页 window.location.href = "/";这会粗暴地中断所有等待并跳转,但会破坏页面原有的提示信息。
总结与建议
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
修改 common.func.php |
一劳永逸,全局生效,代码干净 | 需要修改核心文件,升级时可能被覆盖 | 强烈推荐,适用于绝大多数需要全局0延时的场景。 |
| 调用时传参 | 灵活,不影响其他地方 | 需要在每个调用点手动修改,容易遗漏 | 适用于只需要在特定几个地方实现0延时的场景。 |
| 纯前端修改 | 无需修改文件,快速临时测试 | 破坏页面体验,刷新即失效,不专业 | 仅用于临时调试或紧急修复,不推荐正式使用。 |
最佳实践:
对于绝大多数情况,推荐使用方法一,即修改 include/common.func.php 文件中的 $litime 默认值为 0,这样设置后,整个网站的提示信息跳转都会变得非常迅速,用户体验更好。
注意: 修改核心文件前,务必备份原文件,以防升级或操作失误导致网站出现问题。
