搞到一个插件,MjjBox网站小黄鸡表情排列首位+放大油猴插件,效果如图,有兴趣的可以试试。
插件代码:
// ==UserScript==
// @name mjjbox 小黄鸡表情置顶
// @namespace http://tampermonkey.net/
// @version 1.0
// @description 将小黄鸡表情调整到表情选择器的第一个位置
// @author blogs.zuichu.de
// @match https://mjjbox.com/*
// @icon https://mjjbox.com/favicon.ico
// @grant GM_addStyle
// ==/UserScript==
(function() {
'use strict';
// 添加自定义样式,将小黄鸡表情放大
GM_addStyle(`
.emoji-picker__section[data-section="小黄鸡"] .emoji {
width: 52px !important;
height: 52px !important;
}
`);
// 调整小黄鸡表情位置的函数
function moveChickenEmojiToFirst() {
console.log('[调试] 尝试查找表情选择器...');
// 1. 调整导航按钮位置
const emojiNav = document.querySelector('.emoji-picker__sections-nav');
if (!emojiNav) {
console.log('[调试] 未找到 .emoji-picker__sections-nav');
return false;
}
console.log('[调试] 找到表情选择器导航:', emojiNav);
console.log('[调试] 表情选择器内的所有按钮数量:', emojiNav.querySelectorAll('button').length);
const chickenBtn = emojiNav.querySelector('[data-section="小黄鸡"]');
if (!chickenBtn) {
console.log('[调试] 未找到小黄鸡按钮');
// 输出所有 data-section 属性值
const allBtns = emojiNav.querySelectorAll('[data-section]');
console.log('[调试] 找到的所有 data-section:', Array.from(allBtns).map(btn => btn.dataset.section));
return false;
}
console.log('[调试] 找到小黄鸡按钮:', chickenBtn);
// 将小黄鸡按钮移动到第一个位置
emojiNav.insertBefore(chickenBtn, emojiNav.firstChild);
console.log('✅ 小黄鸡按钮已调整到第一位');
// 2. 调整表情盘位置
const emojiSections = document.querySelector('.emoji-picker__sections');
if (!emojiSections) {
console.log('[调试] 未找到 .emoji-picker__sections');
return true; // 按钮已调整,返回 true
}
console.log('[调试] 找到表情盘容器:', emojiSections);
const chickenSection = emojiSections.querySelector('[data-section="小黄鸡"]');
if (!chickenSection) {
console.log('[调试] 未找到小黄鸡表情盘');
// 输出所有表情盘的 data-section 属性值
const allSections = emojiSections.querySelectorAll('[data-section]');
console.log('[调试] 找到的所有表情盘 data-section:', Array.from(allSections).map(sec => sec.dataset.section));
return true; // 按钮已调整,返回 true
}
console.log('[调试] 找到小黄鸡表情盘:', chickenSection);
// 将小黄鸡表情盘移动到第一个位置
emojiSections.insertBefore(chickenSection, emojiSections.firstChild);
console.log('✅ 小黄鸡表情盘已调整到第一位');
return true;
}
// 监听插入表情按钮的点击事件
function observeEmojiButton() {
console.log('[调试] 开始监听插入表情按钮点击事件');
document.addEventListener('click', function(e) {
console.log('[调试] 检测到点击事件,目标:', e.target);
const target = e.target.closest('.insert-composer-emoji');
if (target) {
console.log('✅ 检测到插入表情按钮被点击:', target);
// 先尝试立即调整(可能表情选择器已经存在)
setTimeout(() => {
moveChickenEmojiToFirst();
}, 100);
// 使用 MutationObserver 监听表情选择器的出现
const observer = new MutationObserver(function(mutations) {
console.log('[调试] 检测到 DOM 变化,mutations 数量:', mutations.length);
for (let mutation of mutations) {
if (mutation.addedNodes.length) {
console.log('[调试] 有新节点添加,尝试调整表情位置');
// 尝试调整表情位置
if (moveChickenEmojiToFirst()) {
observer.disconnect();
console.log('[调试] Observer 已停止监听');
break;
}
}
}
});
// 开始监听 body 的变化
observer.observe(document.body, {
childList: true,
subtree: true
});
console.log('[调试] MutationObserver 已启动');
// 设置超时,5秒后停止监听
setTimeout(() => {
observer.disconnect();
console.log('[调试] Observer 超时,已停止监听');
}, 5000);
}
}, true); // 使用捕获阶段
}
// 页面加载完成后开始监听
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', observeEmojiButton);
} else {
observeEmojiButton();
}
console.log('========================================');
console.log('mjjbox 小黄鸡表情置顶插件已加载');
console.log('版本: 1.0 (调试版)');
console.log('========================================');
})();
