Partytown是否支持Smartlook?集成Smartlook至Partytown遇异常
问题
我尝试用以下代码将Smartlook集成到Partytown,代码没有报错,但Smartlook后台完全没有数据显示,想问问操作是不是哪里有问题?
集成Smartlook的代码:
<script type='text/javascript'> window.smartlook||(function(d) { var o=smartlook=function(){ o.api.push(arguments)},h=d.getElementsByTagName('head')[0]; var c=d.createElement('script');o.api=new Array();c.async=true;c.type='text/partytown'; c.charset='utf-8';c.src='https://web-sdk.smartlook.com/recorder.js';h.appendChild(c); })(document); smartlook('init', PROJECT_KEY, { region: REGION }); </script>
我已经做了这些前置操作:
- 在所有头部代码之前添加了Partytown初始化代码:
<script type="module"> import { partytownSnippet } from "@builder.io/partytown/integration"; const snippetText = partytownSnippet(); const el = document.createElement("script"); el.innerText = snippetText; document.head.appendChild(el); </script>
- 在package.json的scripts中添加了配置:
"scripts": { "partytown": "partytown copylib public/~partytown" },
排查方案
修正脚本类型标记:你现在把内部动态创建的script标签设为
type='text/partytown',但外层包裹的脚本还是text/javascript——Partytown要求整个第三方脚本块都要标记为text/partytown,才能将其移到web worker中执行。内部动态加载的第三方资源,Partytown会自动处理,不需要手动加type。修改后的代码如下:<script type='text/partytown'> window.smartlook||(function(d) { var o=smartlook=function(){ o.api.push(arguments)},h=d.getElementsByTagName('head')[0]; var c=d.createElement('script');o.api=new Array();c.async=true; c.charset='utf-8';c.src='https://web-sdk.smartlook.com/recorder.js';h.appendChild(c); })(document); smartlook('init', PROJECT_KEY, { region: REGION }); </script>验证Partytown资源部署:运行
npm run partytown后,检查public/~partytown目录下是否生成了完整的Partytown文件(比如partytown.js、各类worker文件)。如果目录为空,说明资源拷贝失败,要确认命令里的静态资源目录是否和项目匹配——比如你的静态资源存在dist目录,就要把命令改成partytown copylib dist/~partytown。核对项目密钥与区域配置:确认
PROJECT_KEY是Smartlook后台的真实项目密钥,REGION(比如eu、us)和项目实际区域一致,拼写错误会导致初始化失败但无报错。查看Partytown控制台日志:打开浏览器开发者工具的Console标签,过滤
Partytown相关日志,检查是否有初始化错误、资源加载失败的提示,比如worker文件加载失败会有明确报错。测试纯Smartlook集成:先移除Partytown相关配置,用普通方式集成Smartlook,看后台能否收到数据。如果纯集成也没数据,问题出在Smartlook自身配置(比如域名白名单、项目状态);如果纯集成正常,再聚焦Partytown的配置问题。
内容的提问来源于stack exchange,提问作者Omama Zainab

