You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Docusaurus站点页面加载时调用自定义JS函数?

在Docusaurus中页面加载初期执行自定义JS函数的正确方案

你之前尝试的问题点

  • 尝试2里的<BrowserOnly>是React组件,仅能在JSX文件中使用,不能放在纯JS文件里;通过docusaurus.config.js的scripts配置加载的是纯JS文件,无法识别JSX语法,所以代码不会生效。
  • 尝试1的SSR报错,是因为直接在组件中写了仅能在浏览器运行的代码,没有做环境判断。

方法一:单个页面执行(用BrowserOnly组件)

修改你的src/components/HomepageFeatures/index.js,用正确的方式使用BrowserOnly:

import React, { useEffect } from 'react';
import BrowserOnly from '@docusaurus/BrowserOnly';

export default function HomepageFeatures() {
  return (
    <>
      <BrowserOnly>
        {() => {
          useEffect(() => {
            // 页面加载完成后执行自定义逻辑
            alert("Welcome!");
            // 调用你的自定义函数,比如myCustomFunction()
          }, []);
          return null; // 无需渲染内容时返回null即可
        }}
      </BrowserOnly>
      {/* 原组件的其他内容 */}
    </>
  );
}

方法二:单个页面执行(用ExecutionEnvironment判断)

如果不想用BrowserOnly,可以通过环境判断避免SSR报错:

import React, { useEffect } from 'react';
import ExecutionEnvironment from '@docusaurus/ExecutionEnvironment';

export default function HomepageFeatures() {
  useEffect(() => {
    if (ExecutionEnvironment.canUseDOM) {
      // 仅在浏览器环境执行代码
      alert("Welcome!");
    }
  }, []);

  return (
    {/* 原组件内容 */}
  );
}

方法三:全局所有页面执行

如果要在所有页面加载时执行代码,直接创建src/client/index.js文件(没有则新建),写入客户端代码:

// src/client/index.js
// DOM加载完成后执行(比window.onload更早触发)
document.addEventListener('DOMContentLoaded', () => {
  alert("Welcome!");
  // 执行你的自定义函数
});

// 或者等待所有资源加载完成再执行
// window.addEventListener('load', () => {
//   // 你的代码
// });

Docusaurus会自动加载这个文件,无需额外配置,且该文件仅在浏览器环境运行,不会触发SSR报错。

内容的提问来源于stack exchange,提问作者Ken

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 16:13:35