customer-chat-sdk 1.0.36 → 1.0.37

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.
@@ -237,6 +237,7 @@ export declare class ScreenshotManager {
237
237
  private waitForFonts;
238
238
  /**
239
239
  * 等待所有样式表加载完成(html2canvas 专用)
240
+ * 增强版:确保所有样式表都完全加载
240
241
  */
241
242
  private waitForAllStylesLoaded;
242
243
  /**
@@ -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":"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"}
@@ -7172,24 +7172,35 @@ class ScreenshotManager {
7172
7172
  width: finalWidth,
7173
7173
  height: finalHeight,
7174
7174
  // 关键配置:确保样式正确渲染
7175
- foreignObjectRendering: false, // 禁用 foreignObject,使用传统渲染方式(更稳定)
7176
- onclone: (_clonedDoc, _element) => {
7175
+ // 注意:foreignObjectRendering 可能导致样式问题,改为 true 或移除此选项
7176
+ // foreignObjectRendering: false, // 移除或设为 true,让 html2canvas 自动选择最佳渲染方式
7177
+ onclone: (clonedDoc, _clonedElement) => {
7177
7178
  // 在克隆的文档中,确保所有样式都正确应用
7178
- // html2canvas 会自动处理样式,这里不需要手动复制
7179
- // 如果需要,可以在这里添加额外的样式处理逻辑
7180
- // 复制所有样式表到克隆的文档
7181
- const originalStyleSheets = Array.from(document.styleSheets);
7182
- originalStyleSheets.forEach((originalSheet) => {
7183
- try {
7184
- // 检查样式表是否可访问
7185
- if (originalSheet.cssRules) {
7186
- // 样式表可访问,html2canvas 会自动处理
7179
+ // html2canvas 会自动处理样式,但我们可以确保样式表被正确加载
7180
+ // 确保克隆文档的样式表链接正确
7181
+ const originalLinks = document.querySelectorAll('link[rel="stylesheet"]');
7182
+ const clonedLinks = clonedDoc.querySelectorAll('link[rel="stylesheet"]');
7183
+ // 如果克隆文档缺少样式表链接,从原始文档复制
7184
+ if (clonedLinks.length < originalLinks.length) {
7185
+ originalLinks.forEach((link) => {
7186
+ const href = link.getAttribute('href');
7187
+ if (href && !clonedDoc.querySelector(`link[href="${href}"]`)) {
7188
+ const newLink = clonedDoc.createElement('link');
7189
+ newLink.rel = 'stylesheet';
7190
+ newLink.href = href;
7191
+ clonedDoc.head.appendChild(newLink);
7187
7192
  }
7193
+ });
7194
+ }
7195
+ // 确保内联样式被正确复制
7196
+ const originalStyle = document.querySelector('style');
7197
+ if (originalStyle && originalStyle.textContent) {
7198
+ const clonedStyle = clonedDoc.createElement('style');
7199
+ clonedStyle.textContent = originalStyle.textContent;
7200
+ if (!clonedDoc.head.querySelector('style')) {
7201
+ clonedDoc.head.appendChild(clonedStyle);
7188
7202
  }
7189
- catch (e) {
7190
- // 跨域样式表无法访问,html2canvas 会尝试其他方式
7191
- }
7192
- });
7203
+ }
7193
7204
  },
7194
7205
  // 性能优化
7195
7206
  removeContainer: true, // 截图后移除临时容器
@@ -7207,7 +7218,13 @@ class ScreenshotManager {
7207
7218
  // html2canvas 不支持直接的 proxy 选项,需要通过 onclone 钩子处理图片
7208
7219
  // 如果配置了代理服务器,在克隆时替换图片 URL
7209
7220
  if (this.options.useProxy && this.options.proxyUrl && this.options.proxyUrl.trim() !== '') {
7210
- options.onclone = (clonedDoc) => {
7221
+ // 保存原始的 onclone
7222
+ const originalOnclone = options.onclone;
7223
+ options.onclone = (clonedDoc, clonedElement) => {
7224
+ // 先执行原始的样式处理逻辑
7225
+ if (originalOnclone) {
7226
+ originalOnclone(clonedDoc, clonedElement);
7227
+ }
7211
7228
  // 在克隆的文档中,替换所有跨域图片的 src
7212
7229
  const images = clonedDoc.querySelectorAll('img');
7213
7230
  images.forEach((img) => {
@@ -8318,6 +8335,7 @@ class ScreenshotManager {
8318
8335
  }
8319
8336
  /**
8320
8337
  * 等待所有样式表加载完成(html2canvas 专用)
8338
+ * 增强版:确保所有样式表都完全加载
8321
8339
  */
8322
8340
  async waitForAllStylesLoaded() {
8323
8341
  const styleSheets = Array.from(document.styleSheets);
@@ -8327,14 +8345,28 @@ class ScreenshotManager {
8327
8345
  try {
8328
8346
  // 尝试访问样式表规则,如果成功说明样式表已加载
8329
8347
  const rules = sheet.cssRules;
8330
- if (rules) {
8348
+ if (rules && rules.length > 0) {
8349
+ // 样式表已加载且有规则
8350
+ resolve();
8351
+ }
8352
+ else if (rules) {
8353
+ // 样式表已加载但可能没有规则(空样式表)
8331
8354
  resolve();
8332
8355
  }
8333
8356
  else {
8334
8357
  // 等待样式表加载
8358
+ let checkCount = 0;
8359
+ const maxChecks = 100; // 最多检查100次(5秒)
8335
8360
  const checkInterval = setInterval(() => {
8361
+ checkCount++;
8336
8362
  try {
8337
- if (sheet.cssRules) {
8363
+ const currentRules = sheet.cssRules;
8364
+ if (currentRules) {
8365
+ clearInterval(checkInterval);
8366
+ resolve();
8367
+ }
8368
+ else if (checkCount >= maxChecks) {
8369
+ // 超时,可能样式表无法访问
8338
8370
  clearInterval(checkInterval);
8339
8371
  resolve();
8340
8372
  }
@@ -8359,8 +8391,16 @@ class ScreenshotManager {
8359
8391
  }));
8360
8392
  });
8361
8393
  await Promise.all(promises);
8362
- // 额外等待,确保样式应用
8363
- await new Promise(resolve => setTimeout(resolve, 150));
8394
+ // 额外等待,确保样式应用(增加到300ms,确保样式完全应用)
8395
+ await new Promise(resolve => setTimeout(resolve, 300));
8396
+ // 再次使用 requestAnimationFrame 确保渲染完成
8397
+ await new Promise(resolve => {
8398
+ requestAnimationFrame(() => {
8399
+ requestAnimationFrame(() => {
8400
+ setTimeout(() => resolve(), 100);
8401
+ });
8402
+ });
8403
+ });
8364
8404
  }
8365
8405
  /**
8366
8406
  * 计算压缩后的尺寸
@@ -7168,24 +7168,35 @@ class ScreenshotManager {
7168
7168
  width: finalWidth,
7169
7169
  height: finalHeight,
7170
7170
  // 关键配置:确保样式正确渲染
7171
- foreignObjectRendering: false, // 禁用 foreignObject,使用传统渲染方式(更稳定)
7172
- onclone: (_clonedDoc, _element) => {
7171
+ // 注意:foreignObjectRendering 可能导致样式问题,改为 true 或移除此选项
7172
+ // foreignObjectRendering: false, // 移除或设为 true,让 html2canvas 自动选择最佳渲染方式
7173
+ onclone: (clonedDoc, _clonedElement) => {
7173
7174
  // 在克隆的文档中,确保所有样式都正确应用
7174
- // html2canvas 会自动处理样式,这里不需要手动复制
7175
- // 如果需要,可以在这里添加额外的样式处理逻辑
7176
- // 复制所有样式表到克隆的文档
7177
- const originalStyleSheets = Array.from(document.styleSheets);
7178
- originalStyleSheets.forEach((originalSheet) => {
7179
- try {
7180
- // 检查样式表是否可访问
7181
- if (originalSheet.cssRules) {
7182
- // 样式表可访问,html2canvas 会自动处理
7175
+ // html2canvas 会自动处理样式,但我们可以确保样式表被正确加载
7176
+ // 确保克隆文档的样式表链接正确
7177
+ const originalLinks = document.querySelectorAll('link[rel="stylesheet"]');
7178
+ const clonedLinks = clonedDoc.querySelectorAll('link[rel="stylesheet"]');
7179
+ // 如果克隆文档缺少样式表链接,从原始文档复制
7180
+ if (clonedLinks.length < originalLinks.length) {
7181
+ originalLinks.forEach((link) => {
7182
+ const href = link.getAttribute('href');
7183
+ if (href && !clonedDoc.querySelector(`link[href="${href}"]`)) {
7184
+ const newLink = clonedDoc.createElement('link');
7185
+ newLink.rel = 'stylesheet';
7186
+ newLink.href = href;
7187
+ clonedDoc.head.appendChild(newLink);
7183
7188
  }
7189
+ });
7190
+ }
7191
+ // 确保内联样式被正确复制
7192
+ const originalStyle = document.querySelector('style');
7193
+ if (originalStyle && originalStyle.textContent) {
7194
+ const clonedStyle = clonedDoc.createElement('style');
7195
+ clonedStyle.textContent = originalStyle.textContent;
7196
+ if (!clonedDoc.head.querySelector('style')) {
7197
+ clonedDoc.head.appendChild(clonedStyle);
7184
7198
  }
7185
- catch (e) {
7186
- // 跨域样式表无法访问,html2canvas 会尝试其他方式
7187
- }
7188
- });
7199
+ }
7189
7200
  },
7190
7201
  // 性能优化
7191
7202
  removeContainer: true, // 截图后移除临时容器
@@ -7203,7 +7214,13 @@ class ScreenshotManager {
7203
7214
  // html2canvas 不支持直接的 proxy 选项,需要通过 onclone 钩子处理图片
7204
7215
  // 如果配置了代理服务器,在克隆时替换图片 URL
7205
7216
  if (this.options.useProxy && this.options.proxyUrl && this.options.proxyUrl.trim() !== '') {
7206
- options.onclone = (clonedDoc) => {
7217
+ // 保存原始的 onclone
7218
+ const originalOnclone = options.onclone;
7219
+ options.onclone = (clonedDoc, clonedElement) => {
7220
+ // 先执行原始的样式处理逻辑
7221
+ if (originalOnclone) {
7222
+ originalOnclone(clonedDoc, clonedElement);
7223
+ }
7207
7224
  // 在克隆的文档中,替换所有跨域图片的 src
7208
7225
  const images = clonedDoc.querySelectorAll('img');
7209
7226
  images.forEach((img) => {
@@ -8314,6 +8331,7 @@ class ScreenshotManager {
8314
8331
  }
8315
8332
  /**
8316
8333
  * 等待所有样式表加载完成(html2canvas 专用)
8334
+ * 增强版:确保所有样式表都完全加载
8317
8335
  */
8318
8336
  async waitForAllStylesLoaded() {
8319
8337
  const styleSheets = Array.from(document.styleSheets);
@@ -8323,14 +8341,28 @@ class ScreenshotManager {
8323
8341
  try {
8324
8342
  // 尝试访问样式表规则,如果成功说明样式表已加载
8325
8343
  const rules = sheet.cssRules;
8326
- if (rules) {
8344
+ if (rules && rules.length > 0) {
8345
+ // 样式表已加载且有规则
8346
+ resolve();
8347
+ }
8348
+ else if (rules) {
8349
+ // 样式表已加载但可能没有规则(空样式表)
8327
8350
  resolve();
8328
8351
  }
8329
8352
  else {
8330
8353
  // 等待样式表加载
8354
+ let checkCount = 0;
8355
+ const maxChecks = 100; // 最多检查100次(5秒)
8331
8356
  const checkInterval = setInterval(() => {
8357
+ checkCount++;
8332
8358
  try {
8333
- if (sheet.cssRules) {
8359
+ const currentRules = sheet.cssRules;
8360
+ if (currentRules) {
8361
+ clearInterval(checkInterval);
8362
+ resolve();
8363
+ }
8364
+ else if (checkCount >= maxChecks) {
8365
+ // 超时,可能样式表无法访问
8334
8366
  clearInterval(checkInterval);
8335
8367
  resolve();
8336
8368
  }
@@ -8355,8 +8387,16 @@ class ScreenshotManager {
8355
8387
  }));
8356
8388
  });
8357
8389
  await Promise.all(promises);
8358
- // 额外等待,确保样式应用
8359
- await new Promise(resolve => setTimeout(resolve, 150));
8390
+ // 额外等待,确保样式应用(增加到300ms,确保样式完全应用)
8391
+ await new Promise(resolve => setTimeout(resolve, 300));
8392
+ // 再次使用 requestAnimationFrame 确保渲染完成
8393
+ await new Promise(resolve => {
8394
+ requestAnimationFrame(() => {
8395
+ requestAnimationFrame(() => {
8396
+ setTimeout(() => resolve(), 100);
8397
+ });
8398
+ });
8399
+ });
8360
8400
  }
8361
8401
  /**
8362
8402
  * 计算压缩后的尺寸