|
|
| 第1行: |
第1行: |
| // 修复编辑取消后的死循环问题
| |
| // 修复取消编辑后跳转到 index.php 的问题,自动转为 /wiki/ 短链接
| |
| (function() {
| |
| // 仅在 Minerva 皮肤下生效
| |
| if (mw.config.get('skin') !== 'minerva') return;
| |
|
| |
|
| // 提取 URL 中的标题并转为短链接的核心函数
| |
| function fixEditCancelUrl() {
| |
| const currentUrl = window.location.href;
| |
| const titleRegex = /index\.php\?title=([^&]+)/; // 匹配 index.php?title=xxx 格式
| |
| const match = currentUrl.match(titleRegex);
| |
|
| |
| // 1. 如果匹配到 index.php?title=xxx 格式
| |
| if (match && match[1]) {
| |
| const pageTitle = decodeURIComponent(match[1]); // 解码标题(比如 %E9%A6%96%E9%A1%B5 → 首页)
| |
| const shortUrl = `/wiki/${encodeURIComponent(pageTitle)}`; // 构造 /wiki/标题 格式
| |
|
| |
| // 2. 用 replaceState 重写 URL(无刷新跳转,避免编辑器死循环)
| |
| window.history.replaceState(null, document.title, shortUrl);
| |
|
| |
| // 3. 强制刷新页面内容(确保是浏览模式,而非编辑模式)
| |
| if (!document.querySelector('.ve-init-mw-desktopArticleTarget')) {
| |
| mw.loader.using('mediawiki.api').then(() => {
| |
| new mw.Api().get({
| |
| action: 'parse',
| |
| page: pageTitle,
| |
| prop: 'text',
| |
| format: 'json'
| |
| }).done((data) => {
| |
| const content = document.querySelector('main#content, #content');
| |
| if (content && data.parse) {
| |
| content.innerHTML = data.parse.text['*'];
| |
| }
| |
| });
| |
| });
| |
| }
| |
| }
| |
| }
| |
|
| |
| // 监听时机:页面加载完成 + URL 变化时都执行
| |
| // 1. 页面首次加载时检查
| |
| document.addEventListener('DOMContentLoaded', fixEditCancelUrl);
| |
|
| |
| // 2. 监听浏览器历史变化(取消编辑会触发 popstate)
| |
| window.addEventListener('popstate', fixEditCancelUrl);
| |
|
| |
| // 3. 额外监听 1 秒(防止异步跳转漏检)
| |
| setTimeout(fixEditCancelUrl, 1000);
| |
| })();
| |