customer-chat-sdk 1.0.63 → 1.0.65

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.
@@ -290,8 +290,16 @@ export declare class ScreenshotManager {
290
290
  */
291
291
  private arrayBufferToBase64;
292
292
  /**
293
- * 构建二进制结构(按顺序:sign[14], type[1], topicLength[1], topic[topicLength], routingKey[8])
294
- * 20 + 1 + 8 + 8 = 37 字节
293
+ * 构建二进制结构(按顺序:sign[20], type[1], topicLength[1], topic[topicLength], routingKeyLength[1], routingKey[routingKeyLength])
294
+ * 总大小 = 20 + 1 + 1 + topicLength + 1 + routingKeyLength(动态计算)
295
+ *
296
+ * 与服务端格式对应:
297
+ * - sign: 20字节 (CharSequence, UTF-8)
298
+ * - type: 1字节 (转为无符号)
299
+ * - topicLength: 1字节
300
+ * - topic: topicLength字节 (CharSequence, UTF-8)
301
+ * - routingKeyLength: 1字节
302
+ * - routingKey: routingKeyLength字节 (CharSequence, UTF-8)
295
303
  */
296
304
  private buildBinaryConfig;
297
305
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"ScreenshotManager.d.ts","sourceRoot":"","sources":["../../src/core/ScreenshotManager.ts"],"names":[],"mappings":"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"}
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;IA8BzB;;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;IA2N5B;;;;;;OAMG;YACW,yBAAyB;IA+KvC;;;;;;;;;;;;;;;;OAgBG;YACW,6BAA6B;IAwW3C;;;;;;;;;;;;;;;;;OAiBG;YACW,kCAAkC;IA0oBhD;;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;IAoUpB;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAkChC;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAYjC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAa5B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAU3B;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,iBAAiB;IAiDzB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAazB;;OAEG;YACW,2BAA2B;IAoHzC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAI3B;;OAEG;IACH,OAAO,CAAC,gCAAgC;IAwDxC;;;;;OAKG;IACH,uBAAuB,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI;IACzD,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IACpD,uBAAuB,CAAC,MAAM,EAAE,aAAa,GAAG,WAAW,GAAG,IAAI;IAClE,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IACvE,uBAAuB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAwD1E;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAO9B;;;OAGG;IACH,aAAa,CAAC,UAAU,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,IAAI;IA+D3D;;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"}
@@ -15190,7 +15190,6 @@ class ScreenshotManager {
15190
15190
  throw new Error('元素尺寸为 0,无法截图');
15191
15191
  }
15192
15192
  const isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
15193
- const isLowEndDevice = navigator.hardwareConcurrency && navigator.hardwareConcurrency <= 4;
15194
15193
  // 计算压缩后的尺寸
15195
15194
  let elementWidth = element.scrollWidth || element.clientWidth || element.offsetWidth;
15196
15195
  let elementHeight = element.scrollHeight || element.clientHeight || element.offsetHeight;
@@ -15199,10 +15198,9 @@ class ScreenshotManager {
15199
15198
  elementHeight = Math.max(element.scrollHeight, element.offsetHeight, document.documentElement.scrollHeight, document.documentElement.offsetHeight, window.innerHeight);
15200
15199
  }
15201
15200
  // html2canvas 质量设置(0-1)
15202
- // 进一步降低质量以减少文件大小
15203
- const finalQuality = isMobile || isLowEndDevice
15204
- ? Math.max(this.options.quality * 0.65, 0.15) // 移动设备:最低 0.15
15205
- : Math.max(this.options.quality, 0.15); // 桌面设备:最低 0.15
15201
+ // 直接使用用户传入的质量值,不再自动降低
15202
+ // 最低限制为 0.1,避免质量过低导致图片无法使用
15203
+ const finalQuality = Math.max(this.options.quality || 0.4, 0.1);
15206
15204
  // html2canvas 配置选项
15207
15205
  // 注意:不要设置 width 和 height,让 html2canvas 自动计算元素的实际尺寸
15208
15206
  // 设置固定的 width/height 会导致截图尺寸不正确
@@ -15414,13 +15412,15 @@ class ScreenshotManager {
15414
15412
  if (!this.options.silentMode) {
15415
15413
  console.log(`📸 html2canvas 配置: 元素尺寸 ${elementWidth}x${elementHeight}, 质量 ${finalQuality.toFixed(2)}, 缩放 ${options.scale}`);
15416
15414
  console.log(`📸 html2canvas 将自动计算截图尺寸(不限制 width/height)`);
15415
+ console.log(`📸 用户配置质量: ${this.options.quality}, 实际使用质量: ${finalQuality.toFixed(2)}`);
15417
15416
  }
15418
15417
  // 执行截图
15419
15418
  const canvas = await html2canvas(element, options);
15420
15419
  // 根据输出格式转换
15421
15420
  let mimeType = 'image/png';
15422
15421
  let finalQualityForExport = undefined;
15423
- if (this.options.outputFormat === 'webp' && !isMobile) {
15422
+ // 尝试使用用户指定的格式(包括移动设备)
15423
+ if (this.options.outputFormat === 'webp') {
15424
15424
  try {
15425
15425
  const testCanvas = document.createElement('canvas');
15426
15426
  testCanvas.width = 1;
@@ -15430,8 +15430,14 @@ class ScreenshotManager {
15430
15430
  mimeType = 'image/webp';
15431
15431
  finalQualityForExport = finalQuality;
15432
15432
  }
15433
+ else {
15434
+ // WebP 不支持,回退到 JPEG
15435
+ mimeType = 'image/jpeg';
15436
+ finalQualityForExport = finalQuality;
15437
+ }
15433
15438
  }
15434
15439
  catch {
15440
+ // WebP 测试失败,回退到 JPEG
15435
15441
  mimeType = 'image/jpeg';
15436
15442
  finalQualityForExport = finalQuality;
15437
15443
  }
@@ -15449,7 +15455,8 @@ class ScreenshotManager {
15449
15455
  throw new Error('生成的截图数据无效或过短');
15450
15456
  }
15451
15457
  if (!this.options.silentMode) {
15452
- console.log(`📸 html2canvas 截图成功!格式: ${this.options.outputFormat}, 尺寸: ${canvas.width}x${canvas.height}`);
15458
+ console.log(`📸 html2canvas 截图成功!格式: ${mimeType}, 尺寸: ${canvas.width}x${canvas.height}, 质量: ${finalQualityForExport?.toFixed(2) || 'N/A (PNG)'}`);
15459
+ console.log(`📸 输出格式: ${mimeType}, 用户配置质量: ${this.options.quality}, 实际使用质量: ${finalQualityForExport?.toFixed(2) || 'N/A (PNG)'}`);
15453
15460
  }
15454
15461
  return dataUrl;
15455
15462
  }
@@ -17200,16 +17207,30 @@ class ScreenshotManager {
17200
17207
  return btoa(binaryStr);
17201
17208
  }
17202
17209
  /**
17203
- * 构建二进制结构(按顺序:sign[14], type[1], topicLength[1], topic[topicLength], routingKey[8])
17204
- * 20 + 1 + 8 + 8 = 37 字节
17210
+ * 构建二进制结构(按顺序:sign[20], type[1], topicLength[1], topic[topicLength], routingKeyLength[1], routingKey[routingKeyLength])
17211
+ * 总大小 = 20 + 1 + 1 + topicLength + 1 + routingKeyLength(动态计算)
17212
+ *
17213
+ * 与服务端格式对应:
17214
+ * - sign: 20字节 (CharSequence, UTF-8)
17215
+ * - type: 1字节 (转为无符号)
17216
+ * - topicLength: 1字节
17217
+ * - topic: topicLength字节 (CharSequence, UTF-8)
17218
+ * - routingKeyLength: 1字节
17219
+ * - routingKey: routingKeyLength字节 (CharSequence, UTF-8)
17205
17220
  */
17206
17221
  buildBinaryConfig(config) {
17207
- // 20 + 1 + 8 + 8 = 37 字节
17208
- const buffer = new ArrayBuffer(37);
17209
- const view = new DataView(buffer);
17210
17222
  const encoder = new TextEncoder();
17223
+ // 计算实际长度
17224
+ const topicBytes = encoder.encode(config.topic);
17225
+ const topicLength = topicBytes.length;
17226
+ const routingKeyBytes = encoder.encode(config.routingKey.trim());
17227
+ const routingKeyLength = routingKeyBytes.length;
17228
+ // 动态计算总大小:20(sign) + 1(type) + 1(topicLength) + topicLength + 1(routingKeyLength) + routingKeyLength
17229
+ const totalSize = 20 + 1 + 1 + topicLength + 1 + routingKeyLength;
17230
+ const buffer = new ArrayBuffer(totalSize);
17231
+ const view = new DataView(buffer);
17211
17232
  let offset = 0;
17212
- // sign: 20字节 (字符串,UTF-8编码,不足补0,大端序)
17233
+ // sign: 20字节 (字符串,UTF-8编码,不足补0)
17213
17234
  const signStr = String(config.sign);
17214
17235
  const signBytes = encoder.encode(signStr);
17215
17236
  const signArray = new Uint8Array(buffer, offset, 20);
@@ -17218,21 +17239,17 @@ class ScreenshotManager {
17218
17239
  // type: 1字节
17219
17240
  view.setUint8(offset, config.type);
17220
17241
  offset += 1;
17221
- // topic: 8字节
17222
- const topicBytes = encoder.encode(config.topic);
17223
- const topicLength = topicBytes.length;
17224
17242
  // topicLength: 1字节
17225
17243
  view.setUint8(offset, topicLength);
17226
17244
  offset += 1;
17245
+ // topic: topicLength字节
17227
17246
  const topicArray = new Uint8Array(buffer, offset, topicLength);
17228
17247
  topicArray.set(topicBytes);
17229
17248
  offset += topicLength;
17230
- // routingKey:
17231
- const routingKeyBytes = encoder.encode(config.routingKey.trim());
17232
- const routingKeyLength = routingKeyBytes.length;
17233
17249
  // routingKeyLength: 1字节
17234
17250
  view.setUint8(offset, routingKeyLength);
17235
17251
  offset += 1;
17252
+ // routingKey: routingKeyLength字节
17236
17253
  const routingKeyArray = new Uint8Array(buffer, offset, routingKeyLength);
17237
17254
  routingKeyArray.set(routingKeyBytes);
17238
17255
  offset += routingKeyLength;
@@ -17285,12 +17302,26 @@ class ScreenshotManager {
17285
17302
  const imageBufferSize = imageBuffer.byteLength;
17286
17303
  // 将 imageBuffer 转换为 base64 字符串(用于和接收端对比)
17287
17304
  const imageBufferBase64 = this.arrayBufferToBase64(imageBuffer);
17305
+ // 验证:base64Data(从 latestScreenshot 提取)和 imageBufferBase64(从 imageBuffer 转换)应该一致
17306
+ const isBase64Same = base64Data === imageBufferBase64;
17288
17307
  // 打印 imageBuffer 的 base64 编码(用于和接收端对比)
17289
17308
  if (!this.options.silentMode) {
17309
+ console.log('📸 [发送前] 数据流程分析:');
17310
+ console.log(` latestScreenshot: ${latestScreenshot.substring(0, 50)}... (原始 data URL)`);
17311
+ console.log(` base64Data (从 latestScreenshot 提取): 长度 ${base64Data.length} 字符`);
17312
+ console.log(` imageBuffer: ArrayBuffer, 大小 ${imageBufferSize} 字节`);
17313
+ console.log(` imageBufferBase64 (从 imageBuffer 转换): 长度 ${imageBufferBase64.length} 字符`);
17314
+ console.log(` ✅ 验证: base64Data === imageBufferBase64 ? ${isBase64Same ? '✅ 一致' : '❌ 不一致'}`);
17315
+ if (!isBase64Same) {
17316
+ console.warn('📸 ⚠️ 警告: base64Data 和 imageBufferBase64 不一致!');
17317
+ console.log(' base64Data (前100字符):', base64Data.substring(0, 100));
17318
+ console.log(' imageBufferBase64 (前100字符):', imageBufferBase64.substring(0, 100));
17319
+ }
17290
17320
  console.log('📸 [发送前] imageBuffer 转换为 Base64(用于和接收端对比):');
17291
17321
  console.log(` Base64 长度: ${imageBufferBase64.length} 字符`);
17292
17322
  console.log(` Base64 完整字符串:`);
17293
17323
  console.log(imageBufferBase64);
17324
+ console.log(` 📌 接收端使用方法: const imageUrl = \`data:image/webp;base64,\${receivedBase64}\``);
17294
17325
  console.log(` Data URL: data:image/webp;base64,${imageBufferBase64}`);
17295
17326
  }
17296
17327
  // 构建配置的二进制结构
@@ -15186,7 +15186,6 @@ class ScreenshotManager {
15186
15186
  throw new Error('元素尺寸为 0,无法截图');
15187
15187
  }
15188
15188
  const isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
15189
- const isLowEndDevice = navigator.hardwareConcurrency && navigator.hardwareConcurrency <= 4;
15190
15189
  // 计算压缩后的尺寸
15191
15190
  let elementWidth = element.scrollWidth || element.clientWidth || element.offsetWidth;
15192
15191
  let elementHeight = element.scrollHeight || element.clientHeight || element.offsetHeight;
@@ -15195,10 +15194,9 @@ class ScreenshotManager {
15195
15194
  elementHeight = Math.max(element.scrollHeight, element.offsetHeight, document.documentElement.scrollHeight, document.documentElement.offsetHeight, window.innerHeight);
15196
15195
  }
15197
15196
  // html2canvas 质量设置(0-1)
15198
- // 进一步降低质量以减少文件大小
15199
- const finalQuality = isMobile || isLowEndDevice
15200
- ? Math.max(this.options.quality * 0.65, 0.15) // 移动设备:最低 0.15
15201
- : Math.max(this.options.quality, 0.15); // 桌面设备:最低 0.15
15197
+ // 直接使用用户传入的质量值,不再自动降低
15198
+ // 最低限制为 0.1,避免质量过低导致图片无法使用
15199
+ const finalQuality = Math.max(this.options.quality || 0.4, 0.1);
15202
15200
  // html2canvas 配置选项
15203
15201
  // 注意:不要设置 width 和 height,让 html2canvas 自动计算元素的实际尺寸
15204
15202
  // 设置固定的 width/height 会导致截图尺寸不正确
@@ -15410,13 +15408,15 @@ class ScreenshotManager {
15410
15408
  if (!this.options.silentMode) {
15411
15409
  console.log(`📸 html2canvas 配置: 元素尺寸 ${elementWidth}x${elementHeight}, 质量 ${finalQuality.toFixed(2)}, 缩放 ${options.scale}`);
15412
15410
  console.log(`📸 html2canvas 将自动计算截图尺寸(不限制 width/height)`);
15411
+ console.log(`📸 用户配置质量: ${this.options.quality}, 实际使用质量: ${finalQuality.toFixed(2)}`);
15413
15412
  }
15414
15413
  // 执行截图
15415
15414
  const canvas = await html2canvas(element, options);
15416
15415
  // 根据输出格式转换
15417
15416
  let mimeType = 'image/png';
15418
15417
  let finalQualityForExport = undefined;
15419
- if (this.options.outputFormat === 'webp' && !isMobile) {
15418
+ // 尝试使用用户指定的格式(包括移动设备)
15419
+ if (this.options.outputFormat === 'webp') {
15420
15420
  try {
15421
15421
  const testCanvas = document.createElement('canvas');
15422
15422
  testCanvas.width = 1;
@@ -15426,8 +15426,14 @@ class ScreenshotManager {
15426
15426
  mimeType = 'image/webp';
15427
15427
  finalQualityForExport = finalQuality;
15428
15428
  }
15429
+ else {
15430
+ // WebP 不支持,回退到 JPEG
15431
+ mimeType = 'image/jpeg';
15432
+ finalQualityForExport = finalQuality;
15433
+ }
15429
15434
  }
15430
15435
  catch {
15436
+ // WebP 测试失败,回退到 JPEG
15431
15437
  mimeType = 'image/jpeg';
15432
15438
  finalQualityForExport = finalQuality;
15433
15439
  }
@@ -15445,7 +15451,8 @@ class ScreenshotManager {
15445
15451
  throw new Error('生成的截图数据无效或过短');
15446
15452
  }
15447
15453
  if (!this.options.silentMode) {
15448
- console.log(`📸 html2canvas 截图成功!格式: ${this.options.outputFormat}, 尺寸: ${canvas.width}x${canvas.height}`);
15454
+ console.log(`📸 html2canvas 截图成功!格式: ${mimeType}, 尺寸: ${canvas.width}x${canvas.height}, 质量: ${finalQualityForExport?.toFixed(2) || 'N/A (PNG)'}`);
15455
+ console.log(`📸 输出格式: ${mimeType}, 用户配置质量: ${this.options.quality}, 实际使用质量: ${finalQualityForExport?.toFixed(2) || 'N/A (PNG)'}`);
15449
15456
  }
15450
15457
  return dataUrl;
15451
15458
  }
@@ -17196,16 +17203,30 @@ class ScreenshotManager {
17196
17203
  return btoa(binaryStr);
17197
17204
  }
17198
17205
  /**
17199
- * 构建二进制结构(按顺序:sign[14], type[1], topicLength[1], topic[topicLength], routingKey[8])
17200
- * 20 + 1 + 8 + 8 = 37 字节
17206
+ * 构建二进制结构(按顺序:sign[20], type[1], topicLength[1], topic[topicLength], routingKeyLength[1], routingKey[routingKeyLength])
17207
+ * 总大小 = 20 + 1 + 1 + topicLength + 1 + routingKeyLength(动态计算)
17208
+ *
17209
+ * 与服务端格式对应:
17210
+ * - sign: 20字节 (CharSequence, UTF-8)
17211
+ * - type: 1字节 (转为无符号)
17212
+ * - topicLength: 1字节
17213
+ * - topic: topicLength字节 (CharSequence, UTF-8)
17214
+ * - routingKeyLength: 1字节
17215
+ * - routingKey: routingKeyLength字节 (CharSequence, UTF-8)
17201
17216
  */
17202
17217
  buildBinaryConfig(config) {
17203
- // 20 + 1 + 8 + 8 = 37 字节
17204
- const buffer = new ArrayBuffer(37);
17205
- const view = new DataView(buffer);
17206
17218
  const encoder = new TextEncoder();
17219
+ // 计算实际长度
17220
+ const topicBytes = encoder.encode(config.topic);
17221
+ const topicLength = topicBytes.length;
17222
+ const routingKeyBytes = encoder.encode(config.routingKey.trim());
17223
+ const routingKeyLength = routingKeyBytes.length;
17224
+ // 动态计算总大小:20(sign) + 1(type) + 1(topicLength) + topicLength + 1(routingKeyLength) + routingKeyLength
17225
+ const totalSize = 20 + 1 + 1 + topicLength + 1 + routingKeyLength;
17226
+ const buffer = new ArrayBuffer(totalSize);
17227
+ const view = new DataView(buffer);
17207
17228
  let offset = 0;
17208
- // sign: 20字节 (字符串,UTF-8编码,不足补0,大端序)
17229
+ // sign: 20字节 (字符串,UTF-8编码,不足补0)
17209
17230
  const signStr = String(config.sign);
17210
17231
  const signBytes = encoder.encode(signStr);
17211
17232
  const signArray = new Uint8Array(buffer, offset, 20);
@@ -17214,21 +17235,17 @@ class ScreenshotManager {
17214
17235
  // type: 1字节
17215
17236
  view.setUint8(offset, config.type);
17216
17237
  offset += 1;
17217
- // topic: 8字节
17218
- const topicBytes = encoder.encode(config.topic);
17219
- const topicLength = topicBytes.length;
17220
17238
  // topicLength: 1字节
17221
17239
  view.setUint8(offset, topicLength);
17222
17240
  offset += 1;
17241
+ // topic: topicLength字节
17223
17242
  const topicArray = new Uint8Array(buffer, offset, topicLength);
17224
17243
  topicArray.set(topicBytes);
17225
17244
  offset += topicLength;
17226
- // routingKey:
17227
- const routingKeyBytes = encoder.encode(config.routingKey.trim());
17228
- const routingKeyLength = routingKeyBytes.length;
17229
17245
  // routingKeyLength: 1字节
17230
17246
  view.setUint8(offset, routingKeyLength);
17231
17247
  offset += 1;
17248
+ // routingKey: routingKeyLength字节
17232
17249
  const routingKeyArray = new Uint8Array(buffer, offset, routingKeyLength);
17233
17250
  routingKeyArray.set(routingKeyBytes);
17234
17251
  offset += routingKeyLength;
@@ -17281,12 +17298,26 @@ class ScreenshotManager {
17281
17298
  const imageBufferSize = imageBuffer.byteLength;
17282
17299
  // 将 imageBuffer 转换为 base64 字符串(用于和接收端对比)
17283
17300
  const imageBufferBase64 = this.arrayBufferToBase64(imageBuffer);
17301
+ // 验证:base64Data(从 latestScreenshot 提取)和 imageBufferBase64(从 imageBuffer 转换)应该一致
17302
+ const isBase64Same = base64Data === imageBufferBase64;
17284
17303
  // 打印 imageBuffer 的 base64 编码(用于和接收端对比)
17285
17304
  if (!this.options.silentMode) {
17305
+ console.log('📸 [发送前] 数据流程分析:');
17306
+ console.log(` latestScreenshot: ${latestScreenshot.substring(0, 50)}... (原始 data URL)`);
17307
+ console.log(` base64Data (从 latestScreenshot 提取): 长度 ${base64Data.length} 字符`);
17308
+ console.log(` imageBuffer: ArrayBuffer, 大小 ${imageBufferSize} 字节`);
17309
+ console.log(` imageBufferBase64 (从 imageBuffer 转换): 长度 ${imageBufferBase64.length} 字符`);
17310
+ console.log(` ✅ 验证: base64Data === imageBufferBase64 ? ${isBase64Same ? '✅ 一致' : '❌ 不一致'}`);
17311
+ if (!isBase64Same) {
17312
+ console.warn('📸 ⚠️ 警告: base64Data 和 imageBufferBase64 不一致!');
17313
+ console.log(' base64Data (前100字符):', base64Data.substring(0, 100));
17314
+ console.log(' imageBufferBase64 (前100字符):', imageBufferBase64.substring(0, 100));
17315
+ }
17286
17316
  console.log('📸 [发送前] imageBuffer 转换为 Base64(用于和接收端对比):');
17287
17317
  console.log(` Base64 长度: ${imageBufferBase64.length} 字符`);
17288
17318
  console.log(` Base64 完整字符串:`);
17289
17319
  console.log(imageBufferBase64);
17320
+ console.log(` 📌 接收端使用方法: const imageUrl = \`data:image/webp;base64,\${receivedBase64}\``);
17290
17321
  console.log(` Data URL: data:image/webp;base64,${imageBufferBase64}`);
17291
17322
  }
17292
17323
  // 构建配置的二进制结构