不使用tauri-apps/plugin-opener插件,自定义配置打开url或路径,不需要权限校验

179 阅读1分钟

因为tauri-apps/plugin-opener这个查看需要配置权限,限制哪些窗口才可以单独打开url,挺烦的,看了底层的代码逻辑,其实完全可以通过自定义实现这个功能,还不需要权限校验。

直接添加open这个依赖库:

open依赖库地址:crates.io/crates/open

然后写一个command:

#[tauri::command]
pub async fn open_url(_: tauri::AppHandle, url: String) {
    open::that(url).unwrap();
}

最后在注入的js脚本中添加:

const { invoke } = window.__TAURI__.core

if ('__TAURI__' in window) {
    const hookClick = (e) => {
        const origin = e.target.closest('a')
        const isBaseTargetBlank = document.querySelector(
            'head base[target="_blank"]'
        )
        console.log('origin', origin, isBaseTargetBlank)
        invoke('open_url', { url: origin.href })
    }
    document.addEventListener('click', hookClick, { capture: true })
}

代码中的含义就是:

拦截url打开跳转的链接,然后调用open_url这个函数,就好了

传入的是文件夹或文件路径,就会使用系统默认的程序打开,传入的是url,就会使用默认的浏览器打开