[{"data":1,"prerenderedAt":1010},["ShallowReactive",2],{"navigation-zh-CN":3,"doc-zh-CN-/sdk/installation":81,"surround-zh-CN-/sdk/installation":1005},[4,23,45,67],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":22},"开始使用","i-lucide-rocket","/getting-started","1.getting-started",[10,14,18],{"title":11,"path":12,"stem":13},"认识 TraceVista","/getting-started/introduction","1.getting-started/1.introduction",{"title":15,"path":16,"stem":17},"5 分钟快速接入","/getting-started/quick-start","1.getting-started/2.quick-start",{"title":19,"path":20,"stem":21},"核心概念","/getting-started/concepts","1.getting-started/3.concepts",false,{"title":24,"icon":25,"path":26,"stem":27,"children":28,"page":22},"产品能力","i-lucide-blocks","/features","2.features",[29,33,37,41],{"title":30,"path":31,"stem":32},"功能总览","/features/overview","2.features/1.overview",{"title":34,"path":35,"stem":36},"性能指标与优化","/features/performance","2.features/2.performance",{"title":38,"path":39,"stem":40},"前端错误监控","/features/errors","2.features/3.errors",{"title":42,"path":43,"stem":44},"访问分析与业务事件","/features/analytics","2.features/4.analytics",{"title":46,"icon":47,"path":48,"stem":49,"children":50,"page":22},"SDK 接入","i-lucide-code-xml","/sdk","3.sdk",[51,55,59,63],{"title":52,"path":53,"stem":54},"安装浏览器 SDK","/sdk/installation","3.sdk/1.installation",{"title":56,"path":57,"stem":58},"SDK 配置","/sdk/configuration","3.sdk/2.configuration",{"title":60,"path":61,"stem":62},"SDK API 参考","/sdk/api","3.sdk/3.api",{"title":64,"path":65,"stem":66},"隐私、安全与采集边界","/sdk/privacy","3.sdk/4.privacy",{"title":68,"icon":69,"path":70,"stem":71,"children":72,"page":22},"网站与额度","i-lucide-folder-cog","/account","4.account",[73,77],{"title":74,"path":75,"stem":76},"管理监控网站","/account/projects","4.account/1.projects",{"title":78,"path":79,"stem":80},"免费接收量与用量规则","/account/quota","4.account/2.quota",{"id":82,"title":52,"body":83,"description":998,"extension":999,"links":1000,"meta":1001,"navigation":1002,"path":53,"seo":1003,"stem":54,"__hash__":1004},"docs_zh_cn/3.sdk/1.installation.md",{"type":84,"value":85,"toc":989},"minimal",[86,90,95,173,180,187,191,194,218,233,347,353,359,362,369,483,490,494,505,593,599,602,605,623,638,641,644,679,690,693,885,889,905,944,947,974,977,985],[87,88,89],"p",{},"TraceVista Browser SDK 是一个直接运行在浏览器中的轻量监控客户端。最推荐的方式是使用带 API Key 的 Script 标签：配置少、框架无关，并且能尽早观察页面加载过程。",[91,92,94],"h2",{"id":93},"script-标签接入","Script 标签接入",[96,97,102],"pre",{"className":98,"code":99,"language":100,"meta":101,"style":101},"language-html shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003Cscript\n    defer\n    src=\"https://apm.noxussj.top/monitor.min.js\"\n    data-project-key=\"mk_your_project_key\">\n\u003C/script>\n","html","",[103,104,105,118,125,144,162],"code",{"__ignoreMap":101},[106,107,110,114],"span",{"class":108,"line":109},"line",1,[106,111,113],{"class":112},"s86vT","\u003C",[106,115,117],{"class":116},"sd2Uz","script\n",[106,119,121],{"class":108,"line":120},2,[106,122,124],{"class":123},"s50WR","    defer\n",[106,126,128,131,134,137,141],{"class":108,"line":127},3,[106,129,130],{"class":123},"    src",[106,132,133],{"class":112},"=",[106,135,136],{"class":112},"\"",[106,138,140],{"class":139},"sIEYB","https://apm.noxussj.top/monitor.min.js",[106,142,143],{"class":112},"\"\n",[106,145,147,150,152,154,157,159],{"class":108,"line":146},4,[106,148,149],{"class":123},"    data-project-key",[106,151,133],{"class":112},[106,153,136],{"class":112},[106,155,156],{"class":139},"mk_your_project_key",[106,158,136],{"class":112},[106,160,161],{"class":112},">\n",[106,163,165,168,171],{"class":108,"line":164},5,[106,166,167],{"class":112},"\u003C/",[106,169,170],{"class":116},"script",[106,172,161],{"class":112},[87,174,175,176,179],{},"请从网站设置中复制完整代码，替换示例中的 API Key。SDK 默认把数据发送到脚本所在域名的 ",[103,177,178],{},"/api","。",[87,181,182,183,186],{},"加载后，全局对象 ",[103,184,185],{},"window.TraceVista"," 可用于业务事件和主动错误捕获。",[91,188,190],{"id":189},"api-key-与绑定域名","API Key 与绑定域名",[87,192,193],{},"每个 API Key 只属于一个监控网站。SDK 上报访问、事件、性能和错误时，服务端会用 API Key 找到该网站，并校验请求来源是否与网站设置中的域名一致：",[195,196,197,208,211],"ol",{},[198,199,200,201,204,205,179],"li",{},"优先读取请求头 ",[103,202,203],{},"Origin","，没有可用值时再读取 ",[103,206,207],{},"Referer",[198,209,210],{},"从请求头中只提取 hostname；协议和端口不参与比较。",[198,212,213,214,217],{},"hostname 会转为小写并移除末尾的 ",[103,215,216],{},".","，然后与绑定域名进行完全相等比较。",[87,219,220,221,224,225,228,229,232],{},"绑定域名只匹配同名 hostname。",[103,222,223],{},"example.com","、",[103,226,227],{},"www.example.com"," 和 ",[103,230,231],{},"app.example.com"," 是三个独立域名，不会按主域名或上下级关系自动放行：",[234,235,236,252],"table",{},[237,238,239],"thead",{},[240,241,242,246,249],"tr",{},[243,244,245],"th",{},"API Key 绑定域名",[243,247,248],{},"页面来源",[243,250,251],{},"结果",[253,254,255,270,283,297,310,322,334],"tbody",{},[240,256,257,262,267],{},[258,259,260],"td",{},[103,261,223],{},[258,263,264],{},[103,265,266],{},"https://example.com",[258,268,269],{},"通过",[240,271,272,276,281],{},[258,273,274],{},[103,275,227],{},[258,277,278],{},[103,279,280],{},"https://www.example.com",[258,282,269],{},[240,284,285,289,294],{},[258,286,287],{},[103,288,231],{},[258,290,291],{},[103,292,293],{},"http://app.example.com:3000",[258,295,296],{},"通过，协议和端口不参与匹配",[240,298,299,303,307],{},[258,300,301],{},[103,302,223],{},[258,304,305],{},[103,306,280],{},[258,308,309],{},"403，hostname 不相等",[240,311,312,316,320],{},[258,313,314],{},[103,315,227],{},[258,317,318],{},[103,319,266],{},[258,321,309],{},[240,323,324,328,332],{},[258,325,326],{},[103,327,231],{},[258,329,330],{},[103,331,280],{},[258,333,309],{},[240,335,336,340,345],{},[258,337,338],{},[103,339,223],{},[258,341,342],{},[103,343,344],{},"http://localhost:3000",[258,346,309],{},[87,348,349,352],{},[103,350,351],{},"www"," 和其他子域名不是别名。请按照用户实际打开页面时地址栏中的 hostname 填写网站域名。",[354,355,356],"warning",{},[87,357,358],{},"本地使用 localhost 或 127.0.0.1 时，hostname 与 API Key 绑定域名不一致，上报会返回 403。这是正常的域名校验，不是 SDK 故障。",[91,360,361],{"id":361},"运行时配置接入",[87,363,364,365,368],{},"需要在脚本加载前动态配置时，可以先声明 ",[103,366,367],{},"TraceVistaConfig","：",[96,370,372],{"className":98,"code":371,"language":100,"meta":101,"style":101},"\u003Cscript>\n    window.TraceVistaConfig = {\n        projectKey: 'mk_your_project_key',\n        debug: false,\n        autoTrack: true\n    }\n\u003C/script>\n\u003Cscript defer src=\"https://apm.noxussj.top/monitor.min.js\">\u003C/script>\n",[103,373,374,382,398,417,430,440,446,455],{"__ignoreMap":101},[106,375,376,378,380],{"class":108,"line":109},[106,377,113],{"class":112},[106,379,170],{"class":116},[106,381,161],{"class":112},[106,383,384,388,390,393,395],{"class":108,"line":120},[106,385,387],{"class":386},"sndM8","    window",[106,389,216],{"class":112},[106,391,392],{"class":386},"TraceVistaConfig ",[106,394,133],{"class":112},[106,396,397],{"class":112}," {\n",[106,399,400,403,406,409,411,414],{"class":108,"line":127},[106,401,402],{"class":116},"        projectKey",[106,404,405],{"class":112},":",[106,407,408],{"class":112}," '",[106,410,156],{"class":139},[106,412,413],{"class":112},"'",[106,415,416],{"class":112},",\n",[106,418,419,422,424,428],{"class":108,"line":146},[106,420,421],{"class":116},"        debug",[106,423,405],{"class":112},[106,425,427],{"class":426},"sPKOg"," false",[106,429,416],{"class":112},[106,431,432,435,437],{"class":108,"line":164},[106,433,434],{"class":116},"        autoTrack",[106,436,405],{"class":112},[106,438,439],{"class":426}," true\n",[106,441,443],{"class":108,"line":442},6,[106,444,445],{"class":112},"    }\n",[106,447,449,451,453],{"class":108,"line":448},7,[106,450,167],{"class":112},[106,452,170],{"class":116},[106,454,161],{"class":112},[106,456,458,460,462,465,468,470,472,474,476,479,481],{"class":108,"line":457},8,[106,459,113],{"class":112},[106,461,170],{"class":116},[106,463,464],{"class":123}," defer",[106,466,467],{"class":123}," src",[106,469,133],{"class":112},[106,471,136],{"class":112},[106,473,140],{"class":139},[106,475,136],{"class":112},[106,477,478],{"class":112},">\u003C/",[106,480,170],{"class":116},[106,482,161],{"class":112},[87,484,485,486,489],{},"运行时配置优先于 Script 的 ",[103,487,488],{},"data-*"," 属性。",[91,491,493],{"id":492},"高级手动初始化","高级：手动初始化",[87,495,496,497,500,501,504],{},"默认接入不需要调用 ",[103,498,499],{},"init()","；复制带 ",[103,502,503],{},"data-project-key"," 的 Script 代码即可自动启动。只有当脚本加载时还无法确定 API Key，或必须等用户授权后才启动监控时，才需要手动初始化：",[96,506,510],{"className":507,"code":508,"language":509,"meta":101,"style":101},"language-js shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","window.TraceVista.init({\n    projectKey: 'mk_your_project_key',\n    apiBase: 'https://apm.noxussj.top',\n    debug: false,\n    autoTrack: true\n})\n","js",[103,511,512,534,549,565,576,585],{"__ignoreMap":101},[106,513,514,517,519,522,524,528,531],{"class":108,"line":109},[106,515,516],{"class":386},"window",[106,518,216],{"class":112},[106,520,521],{"class":386},"TraceVista",[106,523,216],{"class":112},[106,525,527],{"class":526},"swgpB","init",[106,529,530],{"class":386},"(",[106,532,533],{"class":112},"{\n",[106,535,536,539,541,543,545,547],{"class":108,"line":120},[106,537,538],{"class":116},"    projectKey",[106,540,405],{"class":112},[106,542,408],{"class":112},[106,544,156],{"class":139},[106,546,413],{"class":112},[106,548,416],{"class":112},[106,550,551,554,556,558,561,563],{"class":108,"line":127},[106,552,553],{"class":116},"    apiBase",[106,555,405],{"class":112},[106,557,408],{"class":112},[106,559,560],{"class":139},"https://apm.noxussj.top",[106,562,413],{"class":112},[106,564,416],{"class":112},[106,566,567,570,572,574],{"class":108,"line":146},[106,568,569],{"class":116},"    debug",[106,571,405],{"class":112},[106,573,427],{"class":426},[106,575,416],{"class":112},[106,577,578,581,583],{"class":108,"line":164},[106,579,580],{"class":116},"    autoTrack",[106,582,405],{"class":112},[106,584,439],{"class":426},[106,586,587,590],{"class":108,"line":442},[106,588,589],{"class":112},"}",[106,591,592],{"class":386},")\n",[87,594,595,596,598],{},"重复调用 ",[103,597,499],{}," 会先停止之前的客户端，再创建新的活动客户端。",[91,600,601],{"id":601},"自动采集启动过程",[87,603,604],{},"SDK 初始化后会安装：",[606,607,608,611,614,617,620],"ul",{},[198,609,610],{},"全局运行时和 Promise 错误监听",[198,612,613],{},"资源加载错误监听",[198,615,616],{},"Fetch 与 XMLHttpRequest 错误包装",[198,618,619],{},"PerformanceObserver 性能监听",[198,621,622],{},"History API 单页应用路由监听",[87,624,625,626,629,630,633,634,637],{},"当 ",[103,627,628],{},"autoTrack"," 为 ",[103,631,632],{},"true"," 时，如果 DOM 仍在解析，SDK 会等待 ",[103,635,636],{},"DOMContentLoaded"," 后记录首次访问；否则立即记录。",[91,639,640],{"id":640},"验证安装",[87,642,643],{},"在浏览器控制台运行：",[96,645,647],{"className":507,"code":646,"language":509,"meta":101,"style":101},"window.TraceVista.version\ntypeof window.TraceVista.track\n",[103,648,649,662],{"__ignoreMap":101},[106,650,651,653,655,657,659],{"class":108,"line":109},[106,652,516],{"class":386},[106,654,216],{"class":112},[106,656,521],{"class":386},[106,658,216],{"class":112},[106,660,661],{"class":386},"version\n",[106,663,664,667,670,672,674,676],{"class":108,"line":120},[106,665,666],{"class":112},"typeof",[106,668,669],{"class":386}," window",[106,671,216],{"class":112},[106,673,521],{"class":386},[106,675,216],{"class":112},[106,677,678],{"class":386},"track\n",[87,680,681,682,685,686,689],{},"正确加载后会看到版本字符串和 ",[103,683,684],{},"\"function\"","。随后打开浏览器 Network 面板，刷新页面，确认存在发送到 ",[103,687,688],{},"/api/stats/track"," 的请求。",[87,691,692],{},"一次成功的页面访问上报请求体大致包含：",[96,694,698],{"className":695,"code":696,"language":697,"meta":101,"style":101},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n    \"visitor_id\": \"v_...\",\n    \"session_id\": \"s_...\",\n    \"page_view_id\": \"pv_...\",\n    \"url\": \"https://example.com/products\",\n    \"path\": \"/products\",\n    \"title\": \"Products\",\n    \"viewport_width\": 1440,\n    \"viewport_height\": 900,\n    \"sdk_version\": \"1.0.0\"\n}\n","json",[103,699,700,704,726,746,766,786,806,826,843,860,879],{"__ignoreMap":101},[106,701,702],{"class":108,"line":109},[106,703,533],{"class":112},[106,705,706,709,712,714,716,719,722,724],{"class":108,"line":120},[106,707,708],{"class":112},"    \"",[106,710,711],{"class":123},"visitor_id",[106,713,136],{"class":112},[106,715,405],{"class":112},[106,717,718],{"class":112}," \"",[106,720,721],{"class":139},"v_...",[106,723,136],{"class":112},[106,725,416],{"class":112},[106,727,728,730,733,735,737,739,742,744],{"class":108,"line":127},[106,729,708],{"class":112},[106,731,732],{"class":123},"session_id",[106,734,136],{"class":112},[106,736,405],{"class":112},[106,738,718],{"class":112},[106,740,741],{"class":139},"s_...",[106,743,136],{"class":112},[106,745,416],{"class":112},[106,747,748,750,753,755,757,759,762,764],{"class":108,"line":146},[106,749,708],{"class":112},[106,751,752],{"class":123},"page_view_id",[106,754,136],{"class":112},[106,756,405],{"class":112},[106,758,718],{"class":112},[106,760,761],{"class":139},"pv_...",[106,763,136],{"class":112},[106,765,416],{"class":112},[106,767,768,770,773,775,777,779,782,784],{"class":108,"line":164},[106,769,708],{"class":112},[106,771,772],{"class":123},"url",[106,774,136],{"class":112},[106,776,405],{"class":112},[106,778,718],{"class":112},[106,780,781],{"class":139},"https://example.com/products",[106,783,136],{"class":112},[106,785,416],{"class":112},[106,787,788,790,793,795,797,799,802,804],{"class":108,"line":442},[106,789,708],{"class":112},[106,791,792],{"class":123},"path",[106,794,136],{"class":112},[106,796,405],{"class":112},[106,798,718],{"class":112},[106,800,801],{"class":139},"/products",[106,803,136],{"class":112},[106,805,416],{"class":112},[106,807,808,810,813,815,817,819,822,824],{"class":108,"line":448},[106,809,708],{"class":112},[106,811,812],{"class":123},"title",[106,814,136],{"class":112},[106,816,405],{"class":112},[106,818,718],{"class":112},[106,820,821],{"class":139},"Products",[106,823,136],{"class":112},[106,825,416],{"class":112},[106,827,828,830,833,835,837,841],{"class":108,"line":457},[106,829,708],{"class":112},[106,831,832],{"class":123},"viewport_width",[106,834,136],{"class":112},[106,836,405],{"class":112},[106,838,840],{"class":839},"smPcV"," 1440",[106,842,416],{"class":112},[106,844,846,848,851,853,855,858],{"class":108,"line":845},9,[106,847,708],{"class":112},[106,849,850],{"class":123},"viewport_height",[106,852,136],{"class":112},[106,854,405],{"class":112},[106,856,857],{"class":839}," 900",[106,859,416],{"class":112},[106,861,863,865,868,870,872,874,877],{"class":108,"line":862},10,[106,864,708],{"class":112},[106,866,867],{"class":123},"sdk_version",[106,869,136],{"class":112},[106,871,405],{"class":112},[106,873,718],{"class":112},[106,875,876],{"class":139},"1.0.0",[106,878,143],{"class":112},[106,880,882],{"class":108,"line":881},11,[106,883,884],{"class":112},"}\n",[91,886,888],{"id":887},"_403-排查","403 排查",[87,890,891,892,224,894,224,897,900,901,904],{},"如果 Network 面板中的 ",[103,893,688],{},[103,895,896],{},"/api/events/track",[103,898,899],{},"/api/vitals/track"," 或 ",[103,902,903],{},"/api/errors/track"," 返回 403：",[195,906,907,923,935,941],{},[198,908,909,910,914,915,918,919,922],{},"打开该请求的 ",[911,912,913],"strong",{},"Response","，查看服务端返回的 ",[103,916,917],{},"message","，不要只看浏览器的 ",[103,920,921],{},"Failed to load resource"," 通用提示。",[198,924,925,926,929,930,932,933,179],{},"在 ",[911,927,928],{},"Request Headers"," 中找到 ",[103,931,203],{},"；如果没有，再检查 ",[103,934,207],{},[198,936,937,938,940],{},"对照网站设置中的绑定域名，确认两边 hostname 完全一致，尤其检查 ",[103,939,351],{},"、其他子域名和预览域名。",[198,942,943],{},"确认页面使用的是该监控网站生成的 API Key，而不是另一个环境或项目的 Key。",[87,945,946],{},"常见响应：",[96,948,950],{"className":695,"code":949,"language":697,"meta":101,"style":101},"{\"message\":\"APIKEY 与当前网站域名不匹配\"}\n",[103,951,952],{"__ignoreMap":101},[106,953,954,957,959,961,963,965,967,970,972],{"class":108,"line":109},[106,955,956],{"class":112},"{",[106,958,136],{"class":112},[106,960,917],{"class":123},[106,962,136],{"class":112},[106,964,405],{"class":112},[106,966,136],{"class":112},[106,968,969],{"class":139},"APIKEY 与当前网站域名不匹配",[106,971,136],{"class":112},[106,973,884],{"class":112},[87,975,976],{},"这表示接口可访问，但请求来源未通过域名校验。修改网站绑定域名或换用与当前来源对应的网站 API Key 后再刷新页面。",[87,978,979,980,179],{},"如果响应提示账号已禁用，则需要先恢复账号状态；它与域名匹配无关。如果没有看到上报请求，请继续检查 API Key、CSP、SDK 请求状态和浏览器控制台，也可以暂时开启 ",[981,982,984],"a",{"href":983},"/sdk/configuration#%E8%B0%83%E8%AF%95%E6%A8%A1%E5%BC%8F","调试配置",[986,987,988],"style",{},"html pre.shiki code .s86vT, html code.shiki .s86vT{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sd2Uz, html code.shiki .sd2Uz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .s50WR, html code.shiki .s50WR{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sIEYB, html code.shiki .sIEYB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sndM8, html code.shiki .sndM8{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sPKOg, html code.shiki .sPKOg{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .swgpB, html code.shiki .swgpB{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .smPcV, html code.shiki .smPcV{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":101,"searchDepth":127,"depth":120,"links":990},[991,992,993,994,995,996,997],{"id":93,"depth":120,"text":94},{"id":189,"depth":120,"text":190},{"id":361,"depth":120,"text":361},{"id":492,"depth":120,"text":493},{"id":601,"depth":120,"text":601},{"id":640,"depth":120,"text":640},{"id":887,"depth":120,"text":888},"通过 Script 标签接入 TraceVista，并了解自动采集的启动时机。","md",null,{},true,{"title":52,"description":998},"MqEWN4myoC",[1006,1008],{"title":42,"path":43,"stem":44,"description":1007,"children":-1},"理解 PV、UV、会话、来源、环境分析和自定义事件，以及如何建立清晰的事件命名规范。",{"title":56,"path":57,"stem":58,"description":1009,"children":-1},"配置 projectKey、apiBase、debug 和 autoTrack，处理多环境与 CSP。",1789572469160]