如何在网站嵌入Qlik App/Sheet及获取应用工作表列表
问题解答
问题1:获取指定Qlik应用的工作表列表
目前Qlik Cloud没有直接返回工作表列表的REST API,可通过以下两种可靠方式实现:
方式1:使用Enigma.js连接Qlik引擎API
之前的Socket连接错误大概率是认证或端点配置问题,按以下步骤修正:
- 用已获取的OAuth Bearer Token,向Qlik Tenant请求引擎会话令牌:
POST https://<QLIK-TENANT>/api/v1/engine/session Headers: Authorization: Bearer <YOUR-OAUTH-TOKEN> web-integration-id: <YOUR-WEB-INTEGRATION-ID> - 用返回的
sessionId和Tenant的WebSocket端点初始化Enigma.js连接,获取工作表:const enigma = require('enigma.js'); const schema = require('enigma.js/schemas/12.612.0.json'); const config = { schema, url: `wss://<QLIK-TENANT>/app/<APP-ID>?QlikSessionId=<SESSION-ID>`, createSocket: (url) => new WebSocket(url), }; (async () => { const session = enigma.create(config); const global = await session.open(); const app = await global.openDoc('<APP-ID>'); const sheets = await app.getSheets(); console.log(sheets); await session.close(); })(); - 注意:WebSocket连接必须携带会话令牌和web-integration-id,同时确保CSP配置允许WebSocket连接。
方式2:使用Qlik Cloud GraphQL API
通过GraphQL查询直接获取应用工作表,无需连接引擎:
query GetAppSheets($appId: ID!) { app(id: $appId) { sheets { items { id name description } } } }
请求时携带OAuth Bearer Token和web-integration-id,端点为https://<QLIK-TENANT>/api/v1/graphql。
问题2:正确嵌入Qlik Sheet/App的简便方案
方案1:IFrame嵌入 + JWT认证(简化配置)
若不想依赖复杂SDK,可直接用IFrame结合JWT实现匿名访问:
- 确保QMC中已完成Identity Provider配置(Issuer、Key ID、公钥),这是JWT认证的基础。
- 后端生成符合Qlik要求的JWT令牌,包含
sub(用户标识)、iss(与QMC配置一致的Issuer)、kid(Key ID)等声明,并用私钥签名。 - 构造IFrame URL并嵌入:
<iframe src="https://<QLIK-TENANT>/sense/app/<APP-ID>/sheet/<SHEET-ID>?qlik-web-integration-id=<YOUR-WEB-INTEGRATION-ID>&qlik-jwt=<YOUR-GENERATED-JWT>" width="100%" height="800px" frameborder="0" ></iframe> - 注意:JWT需设置合理过期时间,且CSP的
frame-ancestors需包含你的网站域名。
方案2:Qlik Embed SDK(简化嵌入逻辑)
Qlik Embed SDK封装了认证和渲染逻辑,比手动处理更简洁:
- 引入SDK:
<script src="https://cdn.jsdelivr.net/npm/@qlik/embed@latest/dist/qlik-embed.min.js"></script> - 初始化并嵌入Sheet/App:
若之前遇到Qlik-Embed的限制,可检查JWT声明是否符合要求,或升级到最新版本SDK。const embed = window.qlikEmbed.init({ host: '<QLIK-TENANT>', webIntegrationId: '<YOUR-WEB-INTEGRATION-ID>', authType: 'jwt', jwt: '<YOUR-GENERATED-JWT>', }); embed.render('<APP-ID>/sheet/<SHEET-ID>', { element: document.getElementById('embed-container'), width: '100%', height: '800px', });
Socket连接错误排查
之前Enigma.js的Socket连接错误,常见原因:
- WebSocket URL未携带
QlikSessionId或web-integration-id参数 - CSP配置未允许WebSocket连接(需将
wss://<QLIK-TENANT>添加到connect-src指令) - OAuth令牌权限不足(需包含
app:read、engine:read等权限)
内容的提问来源于stack exchange,提问作者HarisH Sharma
相关产品推荐
相关产品推荐

