customer-chat-sdk 1.0.49 → 1.0.50
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScreenshotManager.d.ts","sourceRoot":"","sources":["../../src/core/ScreenshotManager.ts"],"names":[],"mappings":"AAWA;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,KAAK,CAAA;IACtC,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,MAAM,CAAC,EAAE,mBAAmB,GAAG,SAAS,GAAG,aAAa,CAAA;IACxD,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,cAAc,GAAG,QAAQ,GAAG,YAAY,CAAA;IAC3F,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,sBAAsB,CAAC,EAAE,MAAM,CAAA;IAC/B,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,uBAAuB,CAAC,EAAE,OAAO,CAAA;IACjC,aAAa,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,CAAA;IACvC,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;IACnB,GAAG,EAAE,MAAM,CAAA;IACX,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,MAAM,CAAA;IAClB,GAAG,EAAE,MAAM,CAAA;IACX,QAAQ,EAAE,MAAM,CAAA;CACjB;AA4BD;;;GAGG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,OAAO,CAAyH;IACxI,OAAO,CAAC,aAAa,CAA2B;IAChD,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,eAAe,CAAI;IAC3B,OAAO,CAAC,iBAAiB,CAAe;IACxC,OAAO,CAAC,kBAAkB,CAAI;IAC9B,OAAO,CAAC,KAAK,CAAsB;IACnC,OAAO,CAAC,SAAS,CAAQ;IAGzB,OAAO,CAAC,WAAW,CAAsB;IACzC,OAAO,CAAC,mBAAmB,CAA4B;IACvD,OAAO,CAAC,oBAAoB,CAAqC;IAGjE,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,eAAe,CAA8B;IAGrD,OAAO,CAAC,iBAAiB,CAAY;IACrC,OAAO,CAAC,cAAc,CAA2B;IACjD,OAAO,CAAC,kBAAkB,CAAa;IACvC,OAAO,CAAC,kBAAkB,CAAa;IACvC,OAAO,CAAC,qBAAqB,CAAY;IACzC,OAAO,CAAC,aAAa,CAAe;IAGpC,OAAO,CAAC,sBAAsB,CAAQ;IAGtC,OAAO,CAAC,eAAe,CAAqE;IAC5F,OAAO,CAAC,iBAAiB,CAAQ;IAGjC,OAAO,CAAC,cAAc,CAA8D;IAGpF,OAAO,CAAC,eAAe,CAAsB;IAG7C,OAAO,CAAC,eAAe,CAA8B;IAGrD,OAAO,CAAC,eAAe,CAA4D;IAGnF,OAAO,CAAC,cAAc,CAA2B;IACjD,OAAO,CAAC,cAAc,CAAQ;IAG9B,OAAO,CAAC,oBAAoB,CAAoC;IAChE,OAAO,CAAC,oBAAoB,CAAyB;IAGrD,OAAO,CAAC,YAAY,CAAQ;IAG5B,OAAO,CAAC,kBAAkB,CAAqC;IAC/D,OAAO,CAAC,eAAe,CAAoB;IAC3C,OAAO,CAAC,2BAA2B,CAAI;IAGvC,OAAO,CAAC,kBAAkB,CAA6C;IACvE,OAAO,CAAC,sBAAsB,CAAwD;gBAE1E,aAAa,EAAE,WAAW,GAAG,IAAI,EAAE,OAAO,GAAE,iBAAsB,EAAE,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI;IAqElH;;OAEG;IACH,gBAAgB,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,GAAG,IAAI;IAsBnD;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAgE5B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAgB5B;;OAEG;IACH,OAAO,CAAC,6BAA6B;IAcrC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA6F3B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA+BzB;;OAEG;IACH,eAAe,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"ScreenshotManager.d.ts","sourceRoot":"","sources":["../../src/core/ScreenshotManager.ts"],"names":[],"mappings":"AAWA;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,KAAK,CAAA;IACtC,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,MAAM,CAAC,EAAE,mBAAmB,GAAG,SAAS,GAAG,aAAa,CAAA;IACxD,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,cAAc,GAAG,QAAQ,GAAG,YAAY,CAAA;IAC3F,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,sBAAsB,CAAC,EAAE,MAAM,CAAA;IAC/B,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,uBAAuB,CAAC,EAAE,OAAO,CAAA;IACjC,aAAa,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,CAAA;IACvC,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;IACnB,GAAG,EAAE,MAAM,CAAA;IACX,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,MAAM,CAAA;IAClB,GAAG,EAAE,MAAM,CAAA;IACX,QAAQ,EAAE,MAAM,CAAA;CACjB;AA4BD;;;GAGG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,OAAO,CAAyH;IACxI,OAAO,CAAC,aAAa,CAA2B;IAChD,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,eAAe,CAAI;IAC3B,OAAO,CAAC,iBAAiB,CAAe;IACxC,OAAO,CAAC,kBAAkB,CAAI;IAC9B,OAAO,CAAC,KAAK,CAAsB;IACnC,OAAO,CAAC,SAAS,CAAQ;IAGzB,OAAO,CAAC,WAAW,CAAsB;IACzC,OAAO,CAAC,mBAAmB,CAA4B;IACvD,OAAO,CAAC,oBAAoB,CAAqC;IAGjE,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,eAAe,CAA8B;IAGrD,OAAO,CAAC,iBAAiB,CAAY;IACrC,OAAO,CAAC,cAAc,CAA2B;IACjD,OAAO,CAAC,kBAAkB,CAAa;IACvC,OAAO,CAAC,kBAAkB,CAAa;IACvC,OAAO,CAAC,qBAAqB,CAAY;IACzC,OAAO,CAAC,aAAa,CAAe;IAGpC,OAAO,CAAC,sBAAsB,CAAQ;IAGtC,OAAO,CAAC,eAAe,CAAqE;IAC5F,OAAO,CAAC,iBAAiB,CAAQ;IAGjC,OAAO,CAAC,cAAc,CAA8D;IAGpF,OAAO,CAAC,eAAe,CAAsB;IAG7C,OAAO,CAAC,eAAe,CAA8B;IAGrD,OAAO,CAAC,eAAe,CAA4D;IAGnF,OAAO,CAAC,cAAc,CAA2B;IACjD,OAAO,CAAC,cAAc,CAAQ;IAG9B,OAAO,CAAC,oBAAoB,CAAoC;IAChE,OAAO,CAAC,oBAAoB,CAAyB;IAGrD,OAAO,CAAC,YAAY,CAAQ;IAG5B,OAAO,CAAC,kBAAkB,CAAqC;IAC/D,OAAO,CAAC,eAAe,CAAoB;IAC3C,OAAO,CAAC,2BAA2B,CAAI;IAGvC,OAAO,CAAC,kBAAkB,CAA6C;IACvE,OAAO,CAAC,sBAAsB,CAAwD;gBAE1E,aAAa,EAAE,WAAW,GAAG,IAAI,EAAE,OAAO,GAAE,iBAAsB,EAAE,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI;IAqElH;;OAEG;IACH,gBAAgB,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,GAAG,IAAI;IAsBnD;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAgE5B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAgB5B;;OAEG;IACH,OAAO,CAAC,6BAA6B;IAcrC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA6F3B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA+BzB;;OAEG;IACH,eAAe,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI;IA0G9C;;OAEG;IACH,cAAc,IAAI,IAAI;IAiBtB;;OAEG;IACG,WAAW,CAAC,KAAK,GAAE,OAAe,GAAG,OAAO,CAAC,OAAO,CAAC;IAS3D;;OAEG;YACW,cAAc;IAkN5B;;;;;;OAMG;YACW,yBAAyB;IAoGvC;;;;;;;;;;;;;;;;OAgBG;YACW,6BAA6B;IAkW3C;;;;;;;;;;;;;;;;;OAiBG;YACW,kCAAkC;IAopBhD;;OAEG;YACW,sBAAsB;IA0BpC;;OAEG;IACH,OAAO,CAAC,eAAe;IAsBvB;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAuBhC;;OAEG;YACW,aAAa;IA4B3B;;OAEG;YACW,iBAAiB;IAsC/B;;OAEG;YACW,iBAAiB;IAwB/B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAO3B;;OAEG;YACW,qBAAqB;IA0BnC;;OAEG;YACW,mBAAmB;IAiEjC;;OAEG;YACW,yBAAyB;IAuDvC;;OAEG;YACW,oBAAoB;IAclC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA+CxB;;OAEG;YACW,uBAAuB;IA2ErC;;OAEG;YACW,UAAU;IAmDxB;;OAEG;YACW,yBAAyB;IAsFvC;;OAEG;IACH,OAAO,CAAC,aAAa;IAqBrB;;OAEG;YACW,mBAAmB;IA8BjC;;;OAGG;YACW,qBAAqB;IAqCnC;;OAEG;YACW,YAAY;IAa1B;;;OAGG;YACW,sBAAsB;IAoEpC;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAe/B;;OAEG;IACH,OAAO,CAAC,YAAY;IAuSpB;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAkChC;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAYjC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAa5B;;;;;;OAMG;IACH,OAAO,CAAC,iBAAiB;IAkCzB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAazB;;OAEG;YACW,2BAA2B;IAuFzC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAI3B;;OAEG;IACH,OAAO,CAAC,gCAAgC;IA8CxC;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAO9B;;OAEG;IACH,OAAO,IAAI,IAAI;IAoEf;;OAEG;IACH,OAAO,CAAC,cAAc;IAkBtB;;;OAGG;IACH,OAAO,CAAC,cAAc;IAqCtB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAoBzB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAsBzB;;OAEG;IACH,QAAQ;;;;;;;;;CAWT"}
|
package/dist/customer-sdk.cjs.js
CHANGED
|
@@ -14687,7 +14687,9 @@ class ScreenshotManager {
|
|
|
14687
14687
|
try {
|
|
14688
14688
|
await this.takeScreenshot();
|
|
14689
14689
|
// 如果配置了二进制模式,发送二进制数据
|
|
14690
|
-
|
|
14690
|
+
// 注意:如果启用了压缩,会在 Worker 压缩完成后自动发送(在 onmessage 中处理)
|
|
14691
|
+
// 如果没有启用压缩,立即发送
|
|
14692
|
+
if (this.currentBinaryConfig && !this.options.compress) {
|
|
14691
14693
|
const latestScreenshot = this.getLatestScreenshot();
|
|
14692
14694
|
if (latestScreenshot) {
|
|
14693
14695
|
try {
|
|
@@ -14728,6 +14730,12 @@ class ScreenshotManager {
|
|
|
14728
14730
|
}
|
|
14729
14731
|
}
|
|
14730
14732
|
}
|
|
14733
|
+
else if (this.currentBinaryConfig && this.options.compress) {
|
|
14734
|
+
// 启用了压缩,等待 Worker 压缩完成后在 onmessage 中发送
|
|
14735
|
+
if (!this.options.silentMode) {
|
|
14736
|
+
console.log('📸 [轮询] 等待 Worker 压缩完成后发送到 iframe...');
|
|
14737
|
+
}
|
|
14738
|
+
}
|
|
14731
14739
|
}
|
|
14732
14740
|
catch (error) {
|
|
14733
14741
|
if (!this.options.silentMode) {
|
|
@@ -14915,9 +14923,32 @@ class ScreenshotManager {
|
|
|
14915
14923
|
});
|
|
14916
14924
|
}
|
|
14917
14925
|
else {
|
|
14926
|
+
// Worker 不可用,如果配置了二进制模式,直接发送原始截图
|
|
14918
14927
|
if (!this.options.silentMode) {
|
|
14919
14928
|
console.warn('📸 ⚠️ Worker 不可用,跳过压缩(使用原始截图)');
|
|
14920
14929
|
}
|
|
14930
|
+
// Worker 不可用时,如果配置了二进制模式,立即发送原始截图
|
|
14931
|
+
if (this.currentBinaryConfig && this.sendToIframeCallback) {
|
|
14932
|
+
const latestScreenshot = this.getLatestScreenshot();
|
|
14933
|
+
if (latestScreenshot) {
|
|
14934
|
+
try {
|
|
14935
|
+
const imageBuffer = this.dataUrlToArrayBuffer(latestScreenshot);
|
|
14936
|
+
const configBuffer = this.buildBinaryConfig(this.currentBinaryConfig);
|
|
14937
|
+
const combinedBuffer = this.combineBinaryData(configBuffer, imageBuffer);
|
|
14938
|
+
const message = {
|
|
14939
|
+
type: 'screenshotBinary',
|
|
14940
|
+
data: combinedBuffer
|
|
14941
|
+
};
|
|
14942
|
+
this.sendToIframeCallback(message);
|
|
14943
|
+
if (!this.options.silentMode) {
|
|
14944
|
+
console.log('📸 [Worker 不可用] ✅ 原始截图已发送到 iframe');
|
|
14945
|
+
}
|
|
14946
|
+
}
|
|
14947
|
+
catch (error) {
|
|
14948
|
+
console.error('📸 [Worker 不可用] ❌ 发送原始截图失败:', error);
|
|
14949
|
+
}
|
|
14950
|
+
}
|
|
14951
|
+
}
|
|
14921
14952
|
}
|
|
14922
14953
|
}
|
|
14923
14954
|
this.error = null;
|
|
@@ -16934,21 +16965,30 @@ class ScreenshotManager {
|
|
|
16934
16965
|
const { type, data } = e.data;
|
|
16935
16966
|
if (type === 'SCREENSHOT_RESULT' && data?.compressed) {
|
|
16936
16967
|
const compressed = data.compressed;
|
|
16937
|
-
//
|
|
16938
|
-
if (this.screenshotHistory.length > 0) {
|
|
16968
|
+
// 更新截图历史记录(压缩成功或失败都会更新)
|
|
16969
|
+
if (this.screenshotHistory.length > 0 && compressed.dataUrl) {
|
|
16939
16970
|
this.screenshotHistory[this.screenshotHistory.length - 1] = compressed.dataUrl;
|
|
16940
16971
|
// 打印压缩统计信息
|
|
16941
|
-
if (!this.options.silentMode
|
|
16942
|
-
const originalKB = (compressed.originalSize * 0.75 / 1024).toFixed(2);
|
|
16943
|
-
const compressedKB = (compressed.compressedSize * 0.75 / 1024).toFixed(2);
|
|
16944
|
-
const ratio = compressed.compressionRatio || '0';
|
|
16945
|
-
console.log('📸 [Worker 压缩] ✅ 压缩完成');
|
|
16946
|
-
console.log(` 原始大小: ${originalKB} KB`);
|
|
16947
|
-
console.log(` 压缩后: ${compressedKB} KB`);
|
|
16948
|
-
console.log(` 压缩率: ${ratio}%`);
|
|
16972
|
+
if (!this.options.silentMode) {
|
|
16949
16973
|
if (compressed.error) {
|
|
16950
|
-
|
|
16974
|
+
// 压缩失败,使用原始数据
|
|
16975
|
+
console.warn('📸 [Worker 压缩] ⚠️ 压缩失败,使用原始截图');
|
|
16976
|
+
console.warn(` ⚠️ 错误: ${compressed.error}`);
|
|
16951
16977
|
}
|
|
16978
|
+
else if (compressed.originalSize && compressed.compressedSize) {
|
|
16979
|
+
// 压缩成功,显示统计信息
|
|
16980
|
+
const originalKB = (compressed.originalSize * 0.75 / 1024).toFixed(2);
|
|
16981
|
+
const compressedKB = (compressed.compressedSize * 0.75 / 1024).toFixed(2);
|
|
16982
|
+
const ratio = compressed.compressionRatio || '0';
|
|
16983
|
+
console.log('📸 [Worker 压缩] ✅ 压缩完成');
|
|
16984
|
+
console.log(` 原始大小: ${originalKB} KB`);
|
|
16985
|
+
console.log(` 压缩后: ${compressedKB} KB`);
|
|
16986
|
+
console.log(` 压缩率: ${ratio}%`);
|
|
16987
|
+
}
|
|
16988
|
+
}
|
|
16989
|
+
// 压缩完成后(无论成功或失败),如果配置了二进制模式,发送数据到 iframe
|
|
16990
|
+
if (this.currentBinaryConfig && compressed.dataUrl) {
|
|
16991
|
+
this.sendCompressedScreenshotToIframe(compressed.dataUrl);
|
|
16952
16992
|
}
|
|
16953
16993
|
}
|
|
16954
16994
|
}
|
|
@@ -16958,6 +16998,28 @@ class ScreenshotManager {
|
|
|
16958
16998
|
if (!this.options.silentMode) {
|
|
16959
16999
|
console.warn('📸 Worker 压缩失败,使用原始截图');
|
|
16960
17000
|
}
|
|
17001
|
+
// Worker 发生错误时,如果配置了二进制模式,发送原始截图
|
|
17002
|
+
if (this.currentBinaryConfig && this.sendToIframeCallback) {
|
|
17003
|
+
const latestScreenshot = this.getLatestScreenshot();
|
|
17004
|
+
if (latestScreenshot) {
|
|
17005
|
+
try {
|
|
17006
|
+
const imageBuffer = this.dataUrlToArrayBuffer(latestScreenshot);
|
|
17007
|
+
const configBuffer = this.buildBinaryConfig(this.currentBinaryConfig);
|
|
17008
|
+
const combinedBuffer = this.combineBinaryData(configBuffer, imageBuffer);
|
|
17009
|
+
const message = {
|
|
17010
|
+
type: 'screenshotBinary',
|
|
17011
|
+
data: combinedBuffer
|
|
17012
|
+
};
|
|
17013
|
+
this.sendToIframeCallback(message);
|
|
17014
|
+
if (!this.options.silentMode) {
|
|
17015
|
+
console.log('📸 [Worker 错误] ✅ 原始截图已发送到 iframe');
|
|
17016
|
+
}
|
|
17017
|
+
}
|
|
17018
|
+
catch (error) {
|
|
17019
|
+
console.error('📸 [Worker 错误] ❌ 发送原始截图失败:', error);
|
|
17020
|
+
}
|
|
17021
|
+
}
|
|
17022
|
+
}
|
|
16961
17023
|
};
|
|
16962
17024
|
// 注意:不要立即 revokeObjectURL,因为 Worker 需要这个 URL 保持有效
|
|
16963
17025
|
// 在 destroy() 方法中清理 Worker 时再 revoke
|
|
@@ -17090,53 +17152,63 @@ class ScreenshotManager {
|
|
|
17090
17152
|
if (success) {
|
|
17091
17153
|
// 截图完成后,等待一小段时间确保数据已保存
|
|
17092
17154
|
await new Promise(resolve => setTimeout(resolve, 100));
|
|
17093
|
-
//
|
|
17094
|
-
|
|
17095
|
-
if (
|
|
17096
|
-
|
|
17097
|
-
|
|
17098
|
-
|
|
17099
|
-
|
|
17100
|
-
|
|
17101
|
-
|
|
17102
|
-
|
|
17103
|
-
|
|
17104
|
-
|
|
17105
|
-
|
|
17106
|
-
|
|
17107
|
-
|
|
17108
|
-
|
|
17109
|
-
|
|
17110
|
-
|
|
17111
|
-
|
|
17112
|
-
|
|
17113
|
-
console.log(` 图片字节大小: ${(imageBufferSize / 1024).toFixed(2)} KB (${imageBufferSize} 字节)`);
|
|
17114
|
-
console.log(` 配置字节大小: ${configBufferSize} 字节`);
|
|
17115
|
-
console.log(` 拼接后总大小: ${(combinedBufferSize / 1024).toFixed(2)} KB (${combinedBufferSize} 字节)`);
|
|
17116
|
-
}
|
|
17117
|
-
// 发送二进制数据到 iframe
|
|
17118
|
-
if (this.sendToIframeCallback) {
|
|
17119
|
-
const message = {
|
|
17120
|
-
type: 'screenshotBinary',
|
|
17121
|
-
data: combinedBuffer
|
|
17122
|
-
};
|
|
17123
|
-
this.sendToIframeCallback(message);
|
|
17155
|
+
// 如果启用了压缩,等待 Worker 压缩完成后在 onmessage 中自动发送
|
|
17156
|
+
// 如果没有启用压缩,立即发送原始截图
|
|
17157
|
+
if (!this.options.compress) {
|
|
17158
|
+
// 没有压缩,直接发送原始截图
|
|
17159
|
+
const latestScreenshot = this.getLatestScreenshot();
|
|
17160
|
+
if (latestScreenshot) {
|
|
17161
|
+
try {
|
|
17162
|
+
// 计算 base64 大小
|
|
17163
|
+
const base64Data = latestScreenshot.split(',')[1] || '';
|
|
17164
|
+
const base64Size = base64Data.length;
|
|
17165
|
+
// 将截图转换为 ArrayBuffer
|
|
17166
|
+
const imageBuffer = this.dataUrlToArrayBuffer(latestScreenshot);
|
|
17167
|
+
const imageBufferSize = imageBuffer.byteLength;
|
|
17168
|
+
// 构建配置的二进制结构
|
|
17169
|
+
const configBuffer = this.buildBinaryConfig(config);
|
|
17170
|
+
const configBufferSize = configBuffer.byteLength;
|
|
17171
|
+
// 合并配置字节和图片字节(配置在前)
|
|
17172
|
+
const combinedBuffer = this.combineBinaryData(configBuffer, imageBuffer);
|
|
17173
|
+
const combinedBufferSize = combinedBuffer.byteLength;
|
|
17174
|
+
// 打印大小信息
|
|
17124
17175
|
if (!this.options.silentMode) {
|
|
17125
|
-
console.log('📸 [
|
|
17176
|
+
console.log('📸 [大小统计]');
|
|
17177
|
+
console.log(` Base64 大小: ${base64Size} 字符`);
|
|
17178
|
+
console.log(` 图片字节大小: ${(imageBufferSize / 1024).toFixed(2)} KB (${imageBufferSize} 字节)`);
|
|
17179
|
+
console.log(` 配置字节大小: ${configBufferSize} 字节`);
|
|
17180
|
+
console.log(` 拼接后总大小: ${(combinedBufferSize / 1024).toFixed(2)} KB (${combinedBufferSize} 字节)`);
|
|
17181
|
+
}
|
|
17182
|
+
// 发送二进制数据到 iframe
|
|
17183
|
+
if (this.sendToIframeCallback) {
|
|
17184
|
+
const message = {
|
|
17185
|
+
type: 'screenshotBinary',
|
|
17186
|
+
data: combinedBuffer
|
|
17187
|
+
};
|
|
17188
|
+
this.sendToIframeCallback(message);
|
|
17189
|
+
if (!this.options.silentMode) {
|
|
17190
|
+
console.log('📸 [iframe] ✅ 二进制数据已发送到 iframe');
|
|
17191
|
+
}
|
|
17192
|
+
}
|
|
17193
|
+
else {
|
|
17194
|
+
console.error('📸 [iframe] ❌ 无法发送二进制数据:未提供发送消息的回调函数');
|
|
17126
17195
|
}
|
|
17127
17196
|
}
|
|
17128
|
-
|
|
17129
|
-
console.error('📸 [iframe] ❌
|
|
17197
|
+
catch (error) {
|
|
17198
|
+
console.error('📸 [iframe] ❌ 处理二进制数据失败:', error);
|
|
17199
|
+
this.uploadError = error instanceof Error ? error.message : String(error);
|
|
17130
17200
|
}
|
|
17131
17201
|
}
|
|
17132
|
-
|
|
17133
|
-
|
|
17134
|
-
|
|
17202
|
+
else {
|
|
17203
|
+
if (!this.options.silentMode) {
|
|
17204
|
+
console.warn('📸 [iframe] 截图完成但未找到截图数据');
|
|
17205
|
+
}
|
|
17135
17206
|
}
|
|
17136
17207
|
}
|
|
17137
17208
|
else {
|
|
17209
|
+
// 启用了压缩,等待 Worker 压缩完成后在 onmessage 中自动发送
|
|
17138
17210
|
if (!this.options.silentMode) {
|
|
17139
|
-
console.
|
|
17211
|
+
console.log('📸 [iframe] 等待 Worker 压缩完成后发送到 iframe...');
|
|
17140
17212
|
}
|
|
17141
17213
|
}
|
|
17142
17214
|
}
|
|
@@ -17152,6 +17224,48 @@ class ScreenshotManager {
|
|
|
17152
17224
|
getLatestScreenshot() {
|
|
17153
17225
|
return this.screenshotHistory[this.screenshotHistory.length - 1] || null;
|
|
17154
17226
|
}
|
|
17227
|
+
/**
|
|
17228
|
+
* 发送压缩后的截图到 iframe
|
|
17229
|
+
*/
|
|
17230
|
+
sendCompressedScreenshotToIframe(dataUrl) {
|
|
17231
|
+
if (!this.currentBinaryConfig || !this.sendToIframeCallback) {
|
|
17232
|
+
return;
|
|
17233
|
+
}
|
|
17234
|
+
try {
|
|
17235
|
+
// 计算 base64 大小
|
|
17236
|
+
const base64Data = dataUrl.split(',')[1] || '';
|
|
17237
|
+
const base64Size = base64Data.length;
|
|
17238
|
+
// 将截图转换为 ArrayBuffer
|
|
17239
|
+
const imageBuffer = this.dataUrlToArrayBuffer(dataUrl);
|
|
17240
|
+
const imageBufferSize = imageBuffer.byteLength;
|
|
17241
|
+
// 构建配置的二进制结构
|
|
17242
|
+
const configBuffer = this.buildBinaryConfig(this.currentBinaryConfig);
|
|
17243
|
+
const configBufferSize = configBuffer.byteLength;
|
|
17244
|
+
// 合并配置字节和图片字节(配置在前)
|
|
17245
|
+
const combinedBuffer = this.combineBinaryData(configBuffer, imageBuffer);
|
|
17246
|
+
const combinedBufferSize = combinedBuffer.byteLength;
|
|
17247
|
+
// 打印大小信息
|
|
17248
|
+
if (!this.options.silentMode) {
|
|
17249
|
+
console.log('📸 [压缩后-大小统计]');
|
|
17250
|
+
console.log(` Base64 大小: ${base64Size} 字符`);
|
|
17251
|
+
console.log(` 图片字节大小: ${(imageBufferSize / 1024).toFixed(2)} KB (${imageBufferSize} 字节)`);
|
|
17252
|
+
console.log(` 配置字节大小: ${configBufferSize} 字节`);
|
|
17253
|
+
console.log(` 拼接后总大小: ${(combinedBufferSize / 1024).toFixed(2)} KB (${combinedBufferSize} 字节)`);
|
|
17254
|
+
}
|
|
17255
|
+
// 发送二进制数据到 iframe
|
|
17256
|
+
const message = {
|
|
17257
|
+
type: 'screenshotBinary',
|
|
17258
|
+
data: combinedBuffer
|
|
17259
|
+
};
|
|
17260
|
+
this.sendToIframeCallback(message);
|
|
17261
|
+
if (!this.options.silentMode) {
|
|
17262
|
+
console.log('📸 [压缩后] ✅ 二进制数据已发送到 iframe');
|
|
17263
|
+
}
|
|
17264
|
+
}
|
|
17265
|
+
catch (error) {
|
|
17266
|
+
console.error('📸 [压缩后] ❌ 处理二进制数据失败:', error);
|
|
17267
|
+
}
|
|
17268
|
+
}
|
|
17155
17269
|
/**
|
|
17156
17270
|
* 启用/禁用截图功能
|
|
17157
17271
|
*/
|
package/dist/customer-sdk.esm.js
CHANGED
|
@@ -14683,7 +14683,9 @@ class ScreenshotManager {
|
|
|
14683
14683
|
try {
|
|
14684
14684
|
await this.takeScreenshot();
|
|
14685
14685
|
// 如果配置了二进制模式,发送二进制数据
|
|
14686
|
-
|
|
14686
|
+
// 注意:如果启用了压缩,会在 Worker 压缩完成后自动发送(在 onmessage 中处理)
|
|
14687
|
+
// 如果没有启用压缩,立即发送
|
|
14688
|
+
if (this.currentBinaryConfig && !this.options.compress) {
|
|
14687
14689
|
const latestScreenshot = this.getLatestScreenshot();
|
|
14688
14690
|
if (latestScreenshot) {
|
|
14689
14691
|
try {
|
|
@@ -14724,6 +14726,12 @@ class ScreenshotManager {
|
|
|
14724
14726
|
}
|
|
14725
14727
|
}
|
|
14726
14728
|
}
|
|
14729
|
+
else if (this.currentBinaryConfig && this.options.compress) {
|
|
14730
|
+
// 启用了压缩,等待 Worker 压缩完成后在 onmessage 中发送
|
|
14731
|
+
if (!this.options.silentMode) {
|
|
14732
|
+
console.log('📸 [轮询] 等待 Worker 压缩完成后发送到 iframe...');
|
|
14733
|
+
}
|
|
14734
|
+
}
|
|
14727
14735
|
}
|
|
14728
14736
|
catch (error) {
|
|
14729
14737
|
if (!this.options.silentMode) {
|
|
@@ -14911,9 +14919,32 @@ class ScreenshotManager {
|
|
|
14911
14919
|
});
|
|
14912
14920
|
}
|
|
14913
14921
|
else {
|
|
14922
|
+
// Worker 不可用,如果配置了二进制模式,直接发送原始截图
|
|
14914
14923
|
if (!this.options.silentMode) {
|
|
14915
14924
|
console.warn('📸 ⚠️ Worker 不可用,跳过压缩(使用原始截图)');
|
|
14916
14925
|
}
|
|
14926
|
+
// Worker 不可用时,如果配置了二进制模式,立即发送原始截图
|
|
14927
|
+
if (this.currentBinaryConfig && this.sendToIframeCallback) {
|
|
14928
|
+
const latestScreenshot = this.getLatestScreenshot();
|
|
14929
|
+
if (latestScreenshot) {
|
|
14930
|
+
try {
|
|
14931
|
+
const imageBuffer = this.dataUrlToArrayBuffer(latestScreenshot);
|
|
14932
|
+
const configBuffer = this.buildBinaryConfig(this.currentBinaryConfig);
|
|
14933
|
+
const combinedBuffer = this.combineBinaryData(configBuffer, imageBuffer);
|
|
14934
|
+
const message = {
|
|
14935
|
+
type: 'screenshotBinary',
|
|
14936
|
+
data: combinedBuffer
|
|
14937
|
+
};
|
|
14938
|
+
this.sendToIframeCallback(message);
|
|
14939
|
+
if (!this.options.silentMode) {
|
|
14940
|
+
console.log('📸 [Worker 不可用] ✅ 原始截图已发送到 iframe');
|
|
14941
|
+
}
|
|
14942
|
+
}
|
|
14943
|
+
catch (error) {
|
|
14944
|
+
console.error('📸 [Worker 不可用] ❌ 发送原始截图失败:', error);
|
|
14945
|
+
}
|
|
14946
|
+
}
|
|
14947
|
+
}
|
|
14917
14948
|
}
|
|
14918
14949
|
}
|
|
14919
14950
|
this.error = null;
|
|
@@ -16930,21 +16961,30 @@ class ScreenshotManager {
|
|
|
16930
16961
|
const { type, data } = e.data;
|
|
16931
16962
|
if (type === 'SCREENSHOT_RESULT' && data?.compressed) {
|
|
16932
16963
|
const compressed = data.compressed;
|
|
16933
|
-
//
|
|
16934
|
-
if (this.screenshotHistory.length > 0) {
|
|
16964
|
+
// 更新截图历史记录(压缩成功或失败都会更新)
|
|
16965
|
+
if (this.screenshotHistory.length > 0 && compressed.dataUrl) {
|
|
16935
16966
|
this.screenshotHistory[this.screenshotHistory.length - 1] = compressed.dataUrl;
|
|
16936
16967
|
// 打印压缩统计信息
|
|
16937
|
-
if (!this.options.silentMode
|
|
16938
|
-
const originalKB = (compressed.originalSize * 0.75 / 1024).toFixed(2);
|
|
16939
|
-
const compressedKB = (compressed.compressedSize * 0.75 / 1024).toFixed(2);
|
|
16940
|
-
const ratio = compressed.compressionRatio || '0';
|
|
16941
|
-
console.log('📸 [Worker 压缩] ✅ 压缩完成');
|
|
16942
|
-
console.log(` 原始大小: ${originalKB} KB`);
|
|
16943
|
-
console.log(` 压缩后: ${compressedKB} KB`);
|
|
16944
|
-
console.log(` 压缩率: ${ratio}%`);
|
|
16968
|
+
if (!this.options.silentMode) {
|
|
16945
16969
|
if (compressed.error) {
|
|
16946
|
-
|
|
16970
|
+
// 压缩失败,使用原始数据
|
|
16971
|
+
console.warn('📸 [Worker 压缩] ⚠️ 压缩失败,使用原始截图');
|
|
16972
|
+
console.warn(` ⚠️ 错误: ${compressed.error}`);
|
|
16947
16973
|
}
|
|
16974
|
+
else if (compressed.originalSize && compressed.compressedSize) {
|
|
16975
|
+
// 压缩成功,显示统计信息
|
|
16976
|
+
const originalKB = (compressed.originalSize * 0.75 / 1024).toFixed(2);
|
|
16977
|
+
const compressedKB = (compressed.compressedSize * 0.75 / 1024).toFixed(2);
|
|
16978
|
+
const ratio = compressed.compressionRatio || '0';
|
|
16979
|
+
console.log('📸 [Worker 压缩] ✅ 压缩完成');
|
|
16980
|
+
console.log(` 原始大小: ${originalKB} KB`);
|
|
16981
|
+
console.log(` 压缩后: ${compressedKB} KB`);
|
|
16982
|
+
console.log(` 压缩率: ${ratio}%`);
|
|
16983
|
+
}
|
|
16984
|
+
}
|
|
16985
|
+
// 压缩完成后(无论成功或失败),如果配置了二进制模式,发送数据到 iframe
|
|
16986
|
+
if (this.currentBinaryConfig && compressed.dataUrl) {
|
|
16987
|
+
this.sendCompressedScreenshotToIframe(compressed.dataUrl);
|
|
16948
16988
|
}
|
|
16949
16989
|
}
|
|
16950
16990
|
}
|
|
@@ -16954,6 +16994,28 @@ class ScreenshotManager {
|
|
|
16954
16994
|
if (!this.options.silentMode) {
|
|
16955
16995
|
console.warn('📸 Worker 压缩失败,使用原始截图');
|
|
16956
16996
|
}
|
|
16997
|
+
// Worker 发生错误时,如果配置了二进制模式,发送原始截图
|
|
16998
|
+
if (this.currentBinaryConfig && this.sendToIframeCallback) {
|
|
16999
|
+
const latestScreenshot = this.getLatestScreenshot();
|
|
17000
|
+
if (latestScreenshot) {
|
|
17001
|
+
try {
|
|
17002
|
+
const imageBuffer = this.dataUrlToArrayBuffer(latestScreenshot);
|
|
17003
|
+
const configBuffer = this.buildBinaryConfig(this.currentBinaryConfig);
|
|
17004
|
+
const combinedBuffer = this.combineBinaryData(configBuffer, imageBuffer);
|
|
17005
|
+
const message = {
|
|
17006
|
+
type: 'screenshotBinary',
|
|
17007
|
+
data: combinedBuffer
|
|
17008
|
+
};
|
|
17009
|
+
this.sendToIframeCallback(message);
|
|
17010
|
+
if (!this.options.silentMode) {
|
|
17011
|
+
console.log('📸 [Worker 错误] ✅ 原始截图已发送到 iframe');
|
|
17012
|
+
}
|
|
17013
|
+
}
|
|
17014
|
+
catch (error) {
|
|
17015
|
+
console.error('📸 [Worker 错误] ❌ 发送原始截图失败:', error);
|
|
17016
|
+
}
|
|
17017
|
+
}
|
|
17018
|
+
}
|
|
16957
17019
|
};
|
|
16958
17020
|
// 注意:不要立即 revokeObjectURL,因为 Worker 需要这个 URL 保持有效
|
|
16959
17021
|
// 在 destroy() 方法中清理 Worker 时再 revoke
|
|
@@ -17086,53 +17148,63 @@ class ScreenshotManager {
|
|
|
17086
17148
|
if (success) {
|
|
17087
17149
|
// 截图完成后,等待一小段时间确保数据已保存
|
|
17088
17150
|
await new Promise(resolve => setTimeout(resolve, 100));
|
|
17089
|
-
//
|
|
17090
|
-
|
|
17091
|
-
if (
|
|
17092
|
-
|
|
17093
|
-
|
|
17094
|
-
|
|
17095
|
-
|
|
17096
|
-
|
|
17097
|
-
|
|
17098
|
-
|
|
17099
|
-
|
|
17100
|
-
|
|
17101
|
-
|
|
17102
|
-
|
|
17103
|
-
|
|
17104
|
-
|
|
17105
|
-
|
|
17106
|
-
|
|
17107
|
-
|
|
17108
|
-
|
|
17109
|
-
console.log(` 图片字节大小: ${(imageBufferSize / 1024).toFixed(2)} KB (${imageBufferSize} 字节)`);
|
|
17110
|
-
console.log(` 配置字节大小: ${configBufferSize} 字节`);
|
|
17111
|
-
console.log(` 拼接后总大小: ${(combinedBufferSize / 1024).toFixed(2)} KB (${combinedBufferSize} 字节)`);
|
|
17112
|
-
}
|
|
17113
|
-
// 发送二进制数据到 iframe
|
|
17114
|
-
if (this.sendToIframeCallback) {
|
|
17115
|
-
const message = {
|
|
17116
|
-
type: 'screenshotBinary',
|
|
17117
|
-
data: combinedBuffer
|
|
17118
|
-
};
|
|
17119
|
-
this.sendToIframeCallback(message);
|
|
17151
|
+
// 如果启用了压缩,等待 Worker 压缩完成后在 onmessage 中自动发送
|
|
17152
|
+
// 如果没有启用压缩,立即发送原始截图
|
|
17153
|
+
if (!this.options.compress) {
|
|
17154
|
+
// 没有压缩,直接发送原始截图
|
|
17155
|
+
const latestScreenshot = this.getLatestScreenshot();
|
|
17156
|
+
if (latestScreenshot) {
|
|
17157
|
+
try {
|
|
17158
|
+
// 计算 base64 大小
|
|
17159
|
+
const base64Data = latestScreenshot.split(',')[1] || '';
|
|
17160
|
+
const base64Size = base64Data.length;
|
|
17161
|
+
// 将截图转换为 ArrayBuffer
|
|
17162
|
+
const imageBuffer = this.dataUrlToArrayBuffer(latestScreenshot);
|
|
17163
|
+
const imageBufferSize = imageBuffer.byteLength;
|
|
17164
|
+
// 构建配置的二进制结构
|
|
17165
|
+
const configBuffer = this.buildBinaryConfig(config);
|
|
17166
|
+
const configBufferSize = configBuffer.byteLength;
|
|
17167
|
+
// 合并配置字节和图片字节(配置在前)
|
|
17168
|
+
const combinedBuffer = this.combineBinaryData(configBuffer, imageBuffer);
|
|
17169
|
+
const combinedBufferSize = combinedBuffer.byteLength;
|
|
17170
|
+
// 打印大小信息
|
|
17120
17171
|
if (!this.options.silentMode) {
|
|
17121
|
-
console.log('📸 [
|
|
17172
|
+
console.log('📸 [大小统计]');
|
|
17173
|
+
console.log(` Base64 大小: ${base64Size} 字符`);
|
|
17174
|
+
console.log(` 图片字节大小: ${(imageBufferSize / 1024).toFixed(2)} KB (${imageBufferSize} 字节)`);
|
|
17175
|
+
console.log(` 配置字节大小: ${configBufferSize} 字节`);
|
|
17176
|
+
console.log(` 拼接后总大小: ${(combinedBufferSize / 1024).toFixed(2)} KB (${combinedBufferSize} 字节)`);
|
|
17177
|
+
}
|
|
17178
|
+
// 发送二进制数据到 iframe
|
|
17179
|
+
if (this.sendToIframeCallback) {
|
|
17180
|
+
const message = {
|
|
17181
|
+
type: 'screenshotBinary',
|
|
17182
|
+
data: combinedBuffer
|
|
17183
|
+
};
|
|
17184
|
+
this.sendToIframeCallback(message);
|
|
17185
|
+
if (!this.options.silentMode) {
|
|
17186
|
+
console.log('📸 [iframe] ✅ 二进制数据已发送到 iframe');
|
|
17187
|
+
}
|
|
17188
|
+
}
|
|
17189
|
+
else {
|
|
17190
|
+
console.error('📸 [iframe] ❌ 无法发送二进制数据:未提供发送消息的回调函数');
|
|
17122
17191
|
}
|
|
17123
17192
|
}
|
|
17124
|
-
|
|
17125
|
-
console.error('📸 [iframe] ❌
|
|
17193
|
+
catch (error) {
|
|
17194
|
+
console.error('📸 [iframe] ❌ 处理二进制数据失败:', error);
|
|
17195
|
+
this.uploadError = error instanceof Error ? error.message : String(error);
|
|
17126
17196
|
}
|
|
17127
17197
|
}
|
|
17128
|
-
|
|
17129
|
-
|
|
17130
|
-
|
|
17198
|
+
else {
|
|
17199
|
+
if (!this.options.silentMode) {
|
|
17200
|
+
console.warn('📸 [iframe] 截图完成但未找到截图数据');
|
|
17201
|
+
}
|
|
17131
17202
|
}
|
|
17132
17203
|
}
|
|
17133
17204
|
else {
|
|
17205
|
+
// 启用了压缩,等待 Worker 压缩完成后在 onmessage 中自动发送
|
|
17134
17206
|
if (!this.options.silentMode) {
|
|
17135
|
-
console.
|
|
17207
|
+
console.log('📸 [iframe] 等待 Worker 压缩完成后发送到 iframe...');
|
|
17136
17208
|
}
|
|
17137
17209
|
}
|
|
17138
17210
|
}
|
|
@@ -17148,6 +17220,48 @@ class ScreenshotManager {
|
|
|
17148
17220
|
getLatestScreenshot() {
|
|
17149
17221
|
return this.screenshotHistory[this.screenshotHistory.length - 1] || null;
|
|
17150
17222
|
}
|
|
17223
|
+
/**
|
|
17224
|
+
* 发送压缩后的截图到 iframe
|
|
17225
|
+
*/
|
|
17226
|
+
sendCompressedScreenshotToIframe(dataUrl) {
|
|
17227
|
+
if (!this.currentBinaryConfig || !this.sendToIframeCallback) {
|
|
17228
|
+
return;
|
|
17229
|
+
}
|
|
17230
|
+
try {
|
|
17231
|
+
// 计算 base64 大小
|
|
17232
|
+
const base64Data = dataUrl.split(',')[1] || '';
|
|
17233
|
+
const base64Size = base64Data.length;
|
|
17234
|
+
// 将截图转换为 ArrayBuffer
|
|
17235
|
+
const imageBuffer = this.dataUrlToArrayBuffer(dataUrl);
|
|
17236
|
+
const imageBufferSize = imageBuffer.byteLength;
|
|
17237
|
+
// 构建配置的二进制结构
|
|
17238
|
+
const configBuffer = this.buildBinaryConfig(this.currentBinaryConfig);
|
|
17239
|
+
const configBufferSize = configBuffer.byteLength;
|
|
17240
|
+
// 合并配置字节和图片字节(配置在前)
|
|
17241
|
+
const combinedBuffer = this.combineBinaryData(configBuffer, imageBuffer);
|
|
17242
|
+
const combinedBufferSize = combinedBuffer.byteLength;
|
|
17243
|
+
// 打印大小信息
|
|
17244
|
+
if (!this.options.silentMode) {
|
|
17245
|
+
console.log('📸 [压缩后-大小统计]');
|
|
17246
|
+
console.log(` Base64 大小: ${base64Size} 字符`);
|
|
17247
|
+
console.log(` 图片字节大小: ${(imageBufferSize / 1024).toFixed(2)} KB (${imageBufferSize} 字节)`);
|
|
17248
|
+
console.log(` 配置字节大小: ${configBufferSize} 字节`);
|
|
17249
|
+
console.log(` 拼接后总大小: ${(combinedBufferSize / 1024).toFixed(2)} KB (${combinedBufferSize} 字节)`);
|
|
17250
|
+
}
|
|
17251
|
+
// 发送二进制数据到 iframe
|
|
17252
|
+
const message = {
|
|
17253
|
+
type: 'screenshotBinary',
|
|
17254
|
+
data: combinedBuffer
|
|
17255
|
+
};
|
|
17256
|
+
this.sendToIframeCallback(message);
|
|
17257
|
+
if (!this.options.silentMode) {
|
|
17258
|
+
console.log('📸 [压缩后] ✅ 二进制数据已发送到 iframe');
|
|
17259
|
+
}
|
|
17260
|
+
}
|
|
17261
|
+
catch (error) {
|
|
17262
|
+
console.error('📸 [压缩后] ❌ 处理二进制数据失败:', error);
|
|
17263
|
+
}
|
|
17264
|
+
}
|
|
17151
17265
|
/**
|
|
17152
17266
|
* 启用/禁用截图功能
|
|
17153
17267
|
*/
|