Jira和Confluence集成后,前端怎么在Vue里安全地嵌入Confluence页面?
我们团队最近把Jira和Confluence打通了,现在想在内部Vue项目里直接嵌入Confluence的某个文档页面。但用iframe加载时老是被CSP拦截,提示“Refused to frame”。
试过加X-Frame-Options和Content-Security-Policy头,但Confluence那边好像不允许自定义这些。有没有其他办法?比如用Atlassian的Forge或者OAuth代理?
<template>
<div>
<iframe
:src="confluenceUrl"
width="100%"
height="600"
frameborder="0">
</iframe>
</div>
</template>
<script>
export default {
data() {
return {
confluenceUrl: 'https://ourcompany.atlassian.net/wiki/spaces/PROJ/pages/123456'
}
}
}
</script>
给你三个方案,按推荐程度排序。
方案一,最优雅的做法是用Confluence REST API拉取内容自己渲染。这样完全绕过iframe限制,还能自定义样式。
Vue组件里这样用:
注意一定要用DOMPurify做XSS过滤,Confluence的HTML内容不能直接信任。
方案二,如果你非要iframe,只能走后端代理。写个简单的代理服务:
然后iframe的src改成你的代理地址。但这方案比较丑,维护成本高。
方案三,Forge确实可以做,但开发成本太高了,除非你本来就要深度集成Atlassian生态,否则杀鸡用牛刀。
建议直接用方案一,API拉取内容自己渲染,干净利落。API Token去Atlassian账户设置里生成就行,记得别提交到代码仓库。