Инъектор

Инъектор используется для добавления статического фрагмента кода в <head> и/или <body> генерируемых HTML-файлов. Hexo производит вставку до того, как будет выполнен фильтр after_render:html.

Краткий обзор

hexo.extend.injector.register(entry, value, to);

ввод <string>

Используется там, где необходимо ввести код внутрь HTML напрямую.

Support those values:

  • head_begin: ввод фрагмента кода сразу после <head> (по умолчанию).
  • head_end: введите фрагмент кода прямо перед `‘.
  • body_begin: введите фрагмент кода сразу после <body>.
  • body_end: введите фрагмент кода прямо перед `

значение <string> | <Function>

Поддерживаются функции, возвращающие строку.

Фрагмент кода, который нужно ввести.

to <string>

На какой странице будут добавлены фрагменты кода.

  • default: Ввод на каждой странице (по умолчанию).
  • home: Вставка произведётся только на домашнюю страницу (у которой переменная is_home() имеет значение true)
  • post: Вставка произведётся только на страницы публикаций (у которых переменная is_post() имеет значение true)
  • page: Вставка произведётся только на страницы (у которых переменная is_page() имеет значение true)
  • archive: Вставка произведётся только на страницы архива (у которых переменнаяis_archive() имеет значение true)
  • category: Вставка произведётся только на страницы категорий (у которых переменная is_category() имеет значение true)
  • tag: Вставка произведётся только на страницы тегов (у которых переменная is_tag() является true)
  • Также можно использовать пользовательское имя макета, см. Запись - Макет.

Существуют и другие внутренние функции, см. hexojs/hexo#4049 для получения более подробной информации.

Пример

const css = hexo.extend.helper.get("css").bind(hexo);
const js = hexo.extend.helper.get("js").bind(hexo);

hexo.extend.injector.register(
"head_end",
() => {
return css(
"https://cdn.jsdelivr.net/npm/aplayer@1.10.1/dist/APlayer.min.css",
);
},
"music",
);

hexo.extend.injector.register(
"body_end",
'<script src="https://cdn.jsdelivr.net/npm/aplayer@1.10.1/dist/APlayer.min.js">',
"music",
);

hexo.extend.injector.register("body_end", () => {
return js("/js/jquery.js");
});

Вышеуказанная настройка добавит APlayer.min.css (с тегом <link>) в </head> любой страницы, макет которой установлен как music, и APlayer.min.js (тег <script>) в </body> этих страниц. Кроме того, jquery.js (с тегом <script>) будет вставлен в </body> каждой сгенерированной страницы.

Доступ к пользовательской конфигурации

Используйте любой из следующих вариантов:

const css = hexo.extend.helper.get("css").bind(hexo);

hexo.extend.injector.register("head_end", () => {
const { cssPath } = hexo.config.fooPlugin;
return css(cssPath);
});
index.js
/* global hexo */

hexo.extend.injector.register("head_end", require("./lib/inject").bind(hexo));
lib/inject.js
module.exports = function () {
const css = this.extend.helper.get("css");
const { cssPath } = this.config.fooPlugin;
return css(cssPath);
};
lib/inject.js
function injectFn() {
const css = this.extend.helper.get("css");
const { cssPath } = this.config.fooPlugin;
return css(cssPath);
}

module.exports = injectFn;
index.js
/* global hexo */

hexo.extend.injector.register("head_end", require("./lib/inject")(hexo));
lib/inject.js
module.exports = (hexo) => () => {
const css = hexo.extend.helper.get("css").bind(hexo);
const { cssPath } = hexo.config.fooPlugin;
return css(cssPath);
};
lib/inject.js
const injectFn = (hexo) => {
const css = hexo.extend.helper.get("css").bind(hexo);
const { cssPath } = hexo.config.fooPlugin;
return css(cssPath);
};

module.exports = (hexo) => injectFn(hexo);