MediaWiki:Common.js
外观
注意:在发布之后,您可能需要清除浏览器缓存才能看到所作出的更改的影响。
- Firefox或Safari:按住Shift的同时单击刷新,或按Ctrl-F5或Ctrl-R(Mac为⌘-R)
- Google Chrome:按Ctrl-Shift-R(Mac为⌘-Shift-R)
- Edge:按住Ctrl的同时单击刷新,或按Ctrl-F5。
// 立即执行闭包,避免污染全局变量
(function() {
// 1. 提前检查皮肤,不是 Minerva 直接退出
if (mw.config.get('skin') !== 'minerva') return;
// 2. 预获取页面信息(mw.config 在页面头部就已加载,无需等待)
const pageTitle = mw.config.get('wgPageName');
const isTalkPage = mw.config.get('wgNamespaceNumber') % 2 === 1;
const isExistingPage = mw.config.get('wgArticleId') > 0;
// 3. 预构造按钮 HTML(比动态创建元素更快)
const editUrl = mw.util.getUrl(pageTitle, { action: 'edit' });
const historyUrl = mw.util.getUrl(pageTitle, { action: 'history' });
const talkTitle = isTalkPage ? pageTitle.replace(/^Talk:/, '') : `Talk:${pageTitle}`;
const talkUrl = mw.util.getUrl(talkTitle);
const buttonsHtml = `
<div id="custom-wiki-bottom-bar" style="
margin: 2.5rem auto 1rem;
padding: 1rem 0;
border-top: 1px solid #e0e0e0;
text-align: center;
max-width: 800px;
">
<a href="${editUrl}" style="
display: inline-block;
margin: 0 0.75rem;
padding: 0.5rem 1.25rem;
background-color: #3366cc;
color: white;
text-decoration: none;
border-radius: 4px;
font-size: 0.95rem;
font-weight: 500;
transition: opacity 0.2s;
" onmouseover="this.style.opacity='0.85'" onmouseout="this.style.opacity='1'">
${isExistingPage ? '编辑页面' : '创建页面'}
</a>
<a href="${historyUrl}" style="
display: inline-block;
margin: 0 0.75rem;
padding: 0.5rem 1.25rem;
background-color: #72777d;
color: white;
text-decoration: none;
border-radius: 4px;
font-size: 0.95rem;
font-weight: 500;
transition: opacity 0.2s;
" onmouseover="this.style.opacity='0.85'" onmouseout="this.style.opacity='1'">
查看历史
</a>
<a href="${talkUrl}" style="
display: inline-block;
margin: 0 0.75rem;
padding: 0.5rem 1.25rem;
background-color: #202122;
color: white;
text-decoration: none;
border-radius: 4px;
font-size: 0.95rem;
font-weight: 500;
transition: opacity 0.2s;
" onmouseover="this.style.opacity='0.85'" onmouseout="this.style.opacity='1'">
${isTalkPage ? '返回条目' : '讨论页'}
</a>
</div>
`;
// 4. 【关键】DOM 一就绪就插入,不等图片/样式/钩子
function insertBar() {
const content = document.querySelector('main#content, #content');
if (content && !document.getElementById('custom-wiki-bottom-bar')) {
content.insertAdjacentHTML('beforeend', buttonsHtml);
}
}
// 优先用 DOMContentLoaded,比 MediaWiki 的钩子快得多
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', insertBar);
} else {
insertBar(); // 如果 DOM 已经就绪,直接执行
}
})();