---
title: "useScriptTriggerConsent()"
description: "在用户授予同意之前延迟加载脚本。"
canonical_url: "https://nuxt-scripts.zhcndoc.com/docs/api/use-script-trigger-consent"
last_updated: "2026-08-11T09:33:13.746Z"
---

当可解析的 `consent` 值授予权限，或你调用 `accept()` 时加载脚本。`revoke()` 方法会更新响应式同意状态；它不会卸载已经加载的脚本，也不会取消在接受同意后启动的 `postConsentTrigger`。
当 `Promise<void>` 解析时，即表示授予同意。

## 函数签名

```ts
function useScriptTriggerConsent(options?: ConsentScriptTriggerOptions): UseConsentScriptTriggerApi
```

## 参数

```ts
export interface ConsentScriptTriggerOptions {
  /**
   * 一个可选的响应式（或 Promise）引用，表示同意状态。你可以使用它来代替调用 accept() 方法接受脚本的同意。
   */
  consent?: Promise<boolean | void> | Ref<boolean> | ComputedRef<boolean> | boolean
  /**
   * 同意后等待的可选条件。支持 `onNuxtReady`、返回 promise 的函数以及回调式触发函数。
   */
  postConsentTrigger?: ExcludePromises<NuxtUseScriptOptions['trigger']> | (() => Promise<any>)
}
```

在运行时，`postConsentTrigger` 支持 `'onNuxtReady'`、接受 `resolve` 的回调式函数，或返回 promise 的无参数函数。即使更宽泛的选项类型允许同步无参数函数，这类函数也永远不会解析该触发器。

在 SSR 期间，该组合式函数会返回一个未解析的 promise，并提供无操作的 `accept()` 和 `revoke()` 方法。同意状态只能在浏览器中解除加载门控。

## 返回值

一个扩展的 Promise，包含接受和撤销同意的方法。

```ts
interface UseConsentScriptTriggerApi extends Promise<void> {
  /**
   * 一个可以调用以接受同意并加载脚本的函数。
   */
  accept: () => void
  /**
   * 通过将 `consented` 设置为 false 来撤销同意。这不会卸载
   * 已加载的脚本。
   */
  revoke: () => void
  /**
   * 同意状态的响应式引用。
   */
  consented: Ref<boolean>
}
```

## 示例

### 基本用法

```vue [app.vue]
<script setup lang="ts">
const trigger = useScriptTriggerConsent()
useScript('https://example.com/script.js', { trigger })
</script>

<template>
  <div v-if="trigger.consented.value">
    <p>已接受 Cookie</p>
    <button @click="trigger.revoke">
      撤销同意
    </button>
  </div>
  <button v-else @click="trigger.accept">
    接受同意
  </button>
</template>
```
