Skip to content

Docker 无法正确处理 siyuan:// 链接 #12297

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
TCOTC opened this issue Aug 20, 2024 · 11 comments
Closed

Docker 无法正确处理 siyuan:// 链接 #12297

TCOTC opened this issue Aug 20, 2024 · 11 comments

Comments

@TCOTC
Copy link
Contributor

TCOTC commented Aug 20, 2024

话说伺服都行,Docker 怎么不行

如果做不到像伺服那样直接跳转,可以试试用 #7086

@TCOTC TCOTC changed the title Docker 无法使用 siyuan:// 链接 Docker 无法正确处理 siyuan:// 链接 Aug 20, 2024
@88250
Copy link
Member

88250 commented Sep 8, 2024

操作系统默认行为就是启动注册对应协议的应用程序,所以无法处理。

@88250 88250 closed this as completed Sep 8, 2024
@TCOTC
Copy link
Contributor Author

TCOTC commented Sep 8, 2024

那在 Docker 环境下就不用这个协议,DOM 里替换掉 siyuan:// ,点击链接的时候通过 URL 跳转

@88250
Copy link
Member

88250 commented Sep 8, 2024 via email

@TCOTC
Copy link
Contributor Author

TCOTC commented Sep 8, 2024

要不我的回帖就别用邮件回复吧,我经常是会编辑补充的,邮件看不到新的内容

image

@88250
Copy link
Member

88250 commented Sep 8, 2024

有的时候在外面不方便,只能邮件回复,见谅。

@TCOTC
Copy link
Contributor Author

TCOTC commented Sep 28, 2024

@88250 GPT 说可以在前端处理:

在面对 siyuan://xxx 链接的处理时,特别是在前后端分离的应用部署到 Docker 后,你可以使用 JavaScript 来拦截这些链接并将用户重定向到相应的 Docker 应用 URL。你可以通过在网页中添加一个事件监听器来捕获对特定链接的点击事件。

实现方式:

  1. 添加事件监听器
    你可以在页面加载完成后,使用 JavaScript 添加一个全局的点击事件监听器,来处理所有的链接点击。

  2. 检查链接并进行重定向
    在事件处理器中,检查每个点击的链接。如果链接的格式符合 siyuan://,就进行相应的重定向。

示例代码:

document.addEventListener('click', function(event) {
    const target = event.target;
    
    // 检查目标是否是一个链接且其链接包含 'siyuan://'
    if (target.tagName === 'A' && target.href.startsWith('siyuan://')) {
        event.preventDefault(); // 阻止默认行为
        
        // 构建 Docker 应用的 URL
        const dockerAppUrl = `http://your-docker-app-url${target.href.replace('siyuan://', '/')}`;
        
        // 重定向到 Docker 应用
        window.location.href = dockerAppUrl;
    }
});

优点:

  1. 用户体验:用户不会感到混乱,因为点击链接后会直接引导他们到正确的 Docker 应用,而不是触发本地的应用。
  2. 灵活性:可以根据需要设置不同的重定向逻辑,比如根据不同的 siyuan://,重定向到不同的 Docker 应用路径。
  3. 易于实现:使用 JavaScript 监听和判断事件相对简单,不需更改后端或重构大部分代码。

缺点:

  1. 依赖 JavaScript:如果用户的浏览器禁用了 JavaScript,那么这种方法将无效,用户将无法正常访问链接。
  2. 性能开销:全局事件监听可能会增加一些性能开销,尤其是在点击事件频繁的页面上。
  3. SEO 影响:如果网页的链接结构依赖 JavaScript 执行才能工作,可能会影响搜索引擎的索引和排名。
  4. 安全性问题:如果没有适当的检查和验证,可能会被恶意链接利用,导致重定向到不安全的地址。

结论:

通过 JavaScript 拦截 siyuan:// 链接并重定向到 Docker 应用是可行的。需权衡其优劣,确保在实现的同时,保持良好的用户体验和安全性。

@88250
Copy link
Member

88250 commented Sep 28, 2024 via email

@TCOTC
Copy link
Contributor Author

TCOTC commented Sep 28, 2024

都用 Docker 了还要拉起什么应用?

@88250
Copy link
Member

88250 commented Sep 28, 2024 via email

@TCOTC
Copy link
Contributor Author

TCOTC commented Sep 28, 2024

但我觉得通过 siyuan:// 跳转到对应的块更重要吧?需要在网页拉起应用应该是低频场景,手动打开应用也不差多少

@88250
Copy link
Member

88250 commented Sep 28, 2024 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants