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

单页应用(SPA)中如何通过@click事件调用URI实现按钮触发

实现按钮调用自定义URI的方法

你原来的按钮代码无法生效,是因为@click需要绑定JavaScript执行语句,直接写URI字符串只会被当作普通字符串解析,不会触发任何行为。下面是几种可行的实现方式:

方式1:直接在@click中调用window.open

这种方式最简单,直接在点击事件里用window.open触发自定义URI:

<button square icon="open_in_new" @click="window.open('obsidian://open?vault=Obsidian&file=test')"></button>

方式2:封装为组件方法(更规范)

把URI调用逻辑封装到组件的方法里,便于维护和复用:

<template>
  <button square icon="open_in_new" @click="openObsidianFile"></button>
</template>

<script>
export default {
  methods: {
    openObsidianFile() {
      // 用window.open触发自定义协议,不会影响当前SPA页面状态
      window.open('obsidian://open?vault=Obsidian&file=test')
      
      // 也可以用window.location.href,但可能导致当前页面跳转(自定义协议一般不会,但保险起见推荐window.open)
      // window.location.href = 'obsidian://open?vault=Obsidian&file=test'
    }
  }
}
</script>

方式3:模拟a标签点击(避免弹窗拦截)

如果担心window.open被浏览器弹窗拦截,可以动态创建隐藏的a标签并触发点击,和你原来的a标签行为完全一致:

<template>
  <button square icon="open_in_new" @click="openObsidianFile"></button>
</template>

<script>
export default {
  methods: {
    openObsidianFile() {
      const link = document.createElement('a')
      link.href = 'obsidian://open?vault=Obsidian&file=test'
      // 触发点击
      link.click()
      // 用完移除元素
      link.remove()
    }
  }
}
</script>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 09:40:25