Script
此 API 参考将帮助你了解如何使用 Script 组件的可用 props。有关功能和用法,请参阅优化脚本页面。
- TypeScript
- JavaScript
import Script from 'next/script'
export default function Dashboard() {
return (
<>
<Script src="https://example.com/script.js" />
</>
)
}
import Script from 'next/script'
export default function Dashboard() {
return (
<>
<Script src="https://example.com/script.js" />
</>
)
}
Props
以下是 Script 组件可用 props 的摘要:
| Prop | 示例 | 类型 | 必填 |
|---|---|---|---|
src | src="http://example.com/script" | String | Required unless inline script is used |
strategy | strategy="lazyOnload" | String | - |
onLoad | onLoad={onLoadFunc} | Function | - |
onReady | onReady={onReadyFunc} | Function | - |
onError | onError={onErrorFunc} | Function | - |
必填 Props
<Script /> 组件需要以下属性。
src
指定外部脚本 URL 的路径字符串。这可以是绝对外部 URL 或内部路径。除非使用内联脚本,否则 src 属性是必需的。
可选 Props
<Script /> 组件接受许多超出必需属性的附加属性。
strategy
脚本的加载策略。可以使用四种不同的策略:
beforeInteractive:在任何 Next.js 代码之前和任何页面水合发生之前加载。afterInteractive:(默认)在页面发生一些(或全部)水合后早期加载。lazyOnload:在浏览器空闲时间加载。worker:(实验性)在 Web Worker 中加载。
beforeInteractive
使用 beforeInteractive 策略加载的脚本从服务器注入到初始 HTML 中,在任何 Next.js 模块之前下载,并按放置顺序执行。
使用此策略标记的脚本在任何第一方代码之前预加载和获取,但它们的执行不会阻止页面水合的发生。
beforeInteractive 脚本必须放置在 Document 组件(pages/_document.js)内,设计用于加载整个站点需要的脚本(即当应用程序中的任何页面已在服务器端加载时,脚本将加载)。
此策略应仅用于需要尽快获取的关键脚本。
import { Html, Head, Main, NextScript } from 'next/document'
import Script from 'next/script'
export default function Document() {
return (
<Html>
<Head />
<body>
<Main />
<NextScript />
<Script
src="https://example.com/script.js"
strategy="beforeInteractive"
/>
</body>
</Html>
)
}
提示: 使用
beforeInteractive的脚本将始终注入到 HTML 文档的head中,无论它在组件中的位置如何。
一些应该使用 beforeInteractive 尽快获取的脚本示例包括:
- 机器人检测器
- Cookie 同意管理器
afterInteractive
使用 afterInteractive 策略的脚本在客户端注入到 HTML 中,将在页面发生一些(或全部)水合后加载。这是 Script 组件的默认策略,应该用于任何需要 尽快加载但不早于任何第一方 Next.js 代码的脚本。
afterInteractive 脚本可以放置在任何页面或布局内,只会在该页面(或页面组)在浏览器中打开时加载和执行。
import Script from 'next/script'
export default function Page() {
return (
<>
<Script src="https://example.com/script.js" strategy="afterInteractive" />
</>
)
}
一些适合 afterInteractive 的脚本示例包括:
- 标签管理器
- 分析工具
lazyOnload
使用 lazyOnload 策略的脚本在浏览器空闲时间在客户端注入到 HTML 中,将在页面上的所有资源获取后加载。此策略应该用于任何不需要早期加载的背景或低优先级脚本。
lazyOnload 脚本可以放置在任何页面或布局内,只会在该页面(或页面组)在浏览器中打开时加载和执行。
import Script from 'next/script'
export default function Page() {
return (
<>
<Script src="https://example.com/script.js" strategy="lazyOnload" />
</>
)
}
不需要立即加载且可以使用 lazyOnload 获取的脚本示例包括:
- 聊天支持插件
- 社交媒体小部件
worker
警告:
worker策略尚未稳定,还不能与 App 路由一起工作。请谨慎使用。
使用 worker 策略的脚本被卸载到 Web Worker 中,以释放主线程并确保只有关键的第一方资源在其上处理。虽然此策略可用于任何脚本,但这是一个高级用例,不能保证支持所有第三方脚本。