💡 为什么写这篇文章?
在追求极简博客的路上,代码高亮是技术博主的门面。EnlighterJS 虽强,但其内置的版权 Logo、冗余的工具栏以及偶发的排版“黑竖杠”实在让人如鲠在喉。
优雅不只是视觉的清净,更是对每一行代码的绝对掌控。 本文分享如何通过一个不到 100 行的插件脚本,彻底“收拾” EnlighterJS。
🛠️ 解决的核心痛点
- 强制去广告:物理抹除顽固的版权跳转按钮。
- 布局修复:根除右侧溢出的“黑竖杠”边框残留。
- 零报警:修复表单 ID/Name 缺失导致的浏览器 SEO 警告。
- 性能优先:自执行匿名函数封装,防止全局变量污染。
🚀 最终版插件代码:Enlighter Pro (v1.3.1)
直接保存为 Plugin.php 即可食用:
<?php
/**
* EnlighterJS Pro - 极客高亮优雅版
* @package Enlighter
* @author osluck
* @version 1.3.1
*/
class Enlighter_Plugin implements Typecho_Plugin_Interface
{
public static function activate()
{
Typecho_Plugin::factory('Widget_Archive')->header = [__CLASS__, 'header'];
Typecho_Plugin::factory('Widget_Archive')->footer = [__CLASS__, 'footer'];
}
public static function deactivate() {}
public static function config(Typecho_Widget_Helper_Form $form)
{
$theme = new Typecho_Widget_Helper_Form_Element_Select('theme', [
'enlighter' => 'Enlighter (默认)',
'dracula' => 'Dracula (暗黑)',
'atomic' => 'Atomic (蓝调)',
'monokai' => 'Monokai (经典)',
'github' => 'GitHub (浅色)'
], 'enlighter', _t('🎨 主题风格'));
$form->addInput($theme);
$windowButton = new Typecho_Widget_Helper_Form_Element_Radio('windowButton',
['true' => '开启', 'false' => '关闭'], 'true', _t('🪟 Mac 圆点'));
$form->addInput($windowButton);
$linenumbers = new Typecho_Widget_Helper_Form_Element_Radio('linenumbers',
['true' => '开启', 'false' => '关闭'], 'true', _t('🔢 显示行号'));
$form->addInput($linenumbers);
$copyButton = new Typecho_Widget_Helper_Form_Element_Radio('copyButton',
['true' => '开启', 'false' => '关闭'], 'true', _t('📋 复制按钮'));
$form->addInput($copyButton);
}
public static function personalConfig(Typecho_Widget_Helper_Form $form) {}
/** 注入样式 那个广告疯了一样!!! */
public static function header()
{
$url = Helper::options()->pluginUrl . '/Enlighter/static/';
echo '<link rel="stylesheet" href="' . $url . 'enlighterjs.min.css" type="text/css" />';
?>
<style>
.enlighter-btn-website,.enlighter-btn[title*=EnlighterJS],.enlighter-btn[title*=Info],a[href*="enlighterjs.org"]{display:none!important;width:0!important;margin:0!important;opacity:0!important}
.enlighter-toolbar>:not(.enlighter-btn-raw):not(.enlighter-btn-copy):not(.enlighter-btn-window){display:none!important}
.enlighter-btn-copy,.enlighter-btn-raw,.enlighter-btn-window{display:inline-block!important;visibility:visible!important;opacity:1!important;margin:0 6px!important}
.enlighter-toolbar,.enlighter-toolbar-bottom,.enlighter-toolbar-top{background:0 0!important;border:none!important;padding:4px 10px!important;margin:0!important;min-height:0!important;text-align:right!important;overflow:hidden!important}
.enlighter-toolbar .enlighter-ellipsis,.enlighter-toolbar::after,.enlighter-toolbar::before{display:none!important;content:none!important}
.enlighter-main{margin:2em 0!important;border-radius:12px!important;box-shadow:0 12px 30px rgba(0,0,0,.2)!important;border:none!important;overflow-x:auto!important}
.enlighter-default .enlighter{white-space:pre!important;word-wrap:normal!important}
</style>
<?php
}
//初始化注入脚本
public static function footer()
{
$settings = Helper::options()->plugin('Enlighter');
$url = Helper::options()->pluginUrl . '/Enlighter/static/';
echo '<script src="' . $url . 'enlighterjs.min.js"></script>';
?>
<script type="text/javascript">
(function() {
// 1. 清理 Typecho 嵌套标签
document.querySelectorAll('pre code').forEach(function(el) {
var parent = el.parentNode;
if (parent.tagName === 'PRE') { parent.textContent = el.textContent; }
});
// 2. 初始化
try {
EnlighterJS.init('pre', null, {
language: 'javascript',
theme: '<?php echo $settings->theme; ?>',
indent: 4,
textOverflow: 'scroll', // 强制滚动,不换行
showLinenumbers: <?php echo $settings->linenumbers; ?>,
rawButton: true,
copyButton: <?php echo $settings->copyButton; ?>,
windowButton: <?php echo $settings->windowButton; ?>,
infoButton: false
});
} catch (e) { console.error('EnlighterJS Init Failed'); }
})();
</script>
<?php
}
}结语
改那个去广告,差点把人整神!乱七八糟的,看的脑瓜子疼,但是它的功能强大,又给人留下深刻印象!我严重怀疑作者写的时候都写懵了!