customer-chat-sdk 1.0.70 → 1.0.72

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,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,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,sBAAsB,CAAO;IAGrC,OAAO,CAAC,cAAc,CAA4B;IAGlD,OAAO,CAAC,eAAe,CAA4D;IAInF,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;IAwDlH;;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;IAmK9C;;OAEG;IACH,cAAc,IAAI,IAAI;IAqBtB;;OAEG;IACG,WAAW,CAAC,KAAK,GAAE,OAAe,GAAG,OAAO,CAAC,OAAO,CAAC;IAS3D;;OAEG;YACW,cAAc;IAoP5B;;;;;;OAMG;YACW,yBAAyB;IA+KvC;;;;;;;;;;;;;;;;OAgBG;YACW,6BAA6B;IA4W3C;;;;;;;;;;;;;;;;;OAiBG;YACW,kCAAkC;IAoqBhD;;OAEG;YACW,sBAAsB;IA0BpC;;OAEG;IACH,OAAO,CAAC,eAAe;IAsBvB;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAuBhC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAO3B;;;OAGG;YACW,qBAAqB;IAInC;;;OAGG;YACW,mBAAmB;IAIjC;;;OAGG;YACW,yBAAyB;IAIvC;;;OAGG;YACW,oBAAoB;IAIlC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA+CxB;;OAEG;YACW,uBAAuB;IA2ErC;;OAEG;YACW,UAAU;IAmDxB;;OAEG;YACW,yBAAyB;IAiFvC;;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;IAoWpB;;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;IAoFxC;;;;;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;IA+Df;;OAEG;IACH,OAAO,CAAC,cAAc;IAkBtB;;;OAGG;IACH,OAAO,CAAC,cAAc;IAqCtB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAoBzB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAezB;;OAEG;IACH,QAAQ;;;;;;;;;CAWT"}
1
+ {"version":3,"file":"ScreenshotManager.d.ts","sourceRoot":"","sources":["../../src/core/ScreenshotManager.ts"],"names":[],"mappings":"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"}
@@ -15638,7 +15638,10 @@ class ScreenshotManager {
15638
15638
  // 对于 body 元素,已经使用了 window.innerWidth/innerHeight,所以直接使用压缩尺寸即可
15639
15639
  const finalWidth = width;
15640
15640
  const finalHeight = height;
15641
- // 处理跨域图片的函数
15641
+ // 判断是否使用代理
15642
+ const shouldUseProxy = this.options.useProxy && this.options.proxyUrl && this.options.proxyUrl.trim() !== '';
15643
+ // 处理跨域图片的函数(仅在配置了代理时使用)
15644
+ // 注意:这个函数只在 shouldUseProxy 为 true 时才会被传递给 modern-screenshot
15642
15645
  const handleCrossOriginImage = async (url) => {
15643
15646
  // 如果是 data URL 或 blob URL,直接返回
15644
15647
  if (url.startsWith('data:') || url.startsWith('blob:')) {
@@ -15654,121 +15657,68 @@ class ScreenshotManager {
15654
15657
  catch (e) {
15655
15658
  // URL 解析失败,继续处理
15656
15659
  }
15657
- // 如果配置了代理服务器,使用代理处理跨域图片
15658
- // 只有当 useProxy 为 true 且 proxyUrl 存在时才使用代理
15659
- const shouldUseProxy = this.options.useProxy && this.options.proxyUrl && this.options.proxyUrl.trim() !== '';
15660
- if (shouldUseProxy) {
15661
- // 检查内存缓存(优先使用缓存,带过期时间检查)
15662
- const cachedDataUrl = this.getCachedImage(url);
15663
- if (cachedDataUrl) {
15664
- if (!this.options.silentMode) {
15665
- console.log(`📸 ✅ 使用内存缓存图片: ${url.substring(0, 50)}...`);
15666
- }
15667
- return cachedDataUrl;
15660
+ // 使用代理处理跨域图片
15661
+ // 检查内存缓存(优先使用缓存,带过期时间检查)
15662
+ const cachedDataUrl = this.getCachedImage(url);
15663
+ if (cachedDataUrl) {
15664
+ if (!this.options.silentMode) {
15665
+ console.log(`📸 使用内存缓存图片: ${url.substring(0, 50)}...`);
15668
15666
  }
15667
+ return cachedDataUrl;
15668
+ }
15669
+ try {
15670
+ // 构建代理请求参数
15671
+ const params = new URLSearchParams({
15672
+ url: url,
15673
+ maxWidth: String(this.options.maxWidth || 1600),
15674
+ maxHeight: String(this.options.maxHeight || 900),
15675
+ quality: String(Math.round((this.options.quality || 0.4) * 100)),
15676
+ format: this.options.outputFormat || 'webp'
15677
+ });
15678
+ let baseUrl = this.options.proxyUrl;
15679
+ baseUrl = baseUrl.replace(/[?&]$/, '');
15680
+ const proxyUrl = `${baseUrl}?${params.toString()}`;
15681
+ // 请求代理服务器(优化:添加超时控制和优先级)
15682
+ const controller = new AbortController();
15683
+ const timeoutId = setTimeout(() => controller.abort(), this.options.imageLoadTimeout);
15669
15684
  try {
15670
- // 构建代理请求参数
15671
- const params = new URLSearchParams({
15672
- url: url,
15673
- maxWidth: String(this.options.maxWidth || 1600),
15674
- maxHeight: String(this.options.maxHeight || 900),
15675
- quality: String(Math.round((this.options.quality || 0.4) * 100)),
15676
- format: this.options.outputFormat || 'webp'
15677
- });
15678
- let baseUrl = this.options.proxyUrl;
15679
- baseUrl = baseUrl.replace(/[?&]$/, '');
15680
- const proxyUrl = `${baseUrl}?${params.toString()}`;
15681
- // 请求代理服务器(优化:添加超时控制和优先级)
15682
- const controller = new AbortController();
15683
- const timeoutId = setTimeout(() => controller.abort(), this.options.imageLoadTimeout);
15684
- try {
15685
- const fetchOptions = {
15686
- method: 'GET',
15687
- mode: 'cors',
15688
- credentials: 'omit',
15689
- headers: {
15690
- 'Accept': 'image/*'
15691
- },
15692
- cache: 'no-cache',
15693
- signal: controller.signal
15694
- };
15695
- // 添加 fetch priority(如果支持)
15696
- if ('priority' in fetchOptions) {
15697
- fetchOptions.priority = this.options.fetchPriority;
15698
- }
15699
- const response = await fetch(proxyUrl, fetchOptions);
15700
- clearTimeout(timeoutId);
15701
- if (!response.ok) {
15702
- throw new Error(`代理请求失败: ${response.status}`);
15703
- }
15704
- const blob = await response.blob();
15705
- const dataUrl = await this.blobToDataUrl(blob);
15706
- // 缓存结果(带时间戳,10分钟有效)
15707
- this.setCachedImage(url, dataUrl);
15708
- return dataUrl;
15685
+ const fetchOptions = {
15686
+ method: 'GET',
15687
+ mode: 'cors',
15688
+ credentials: 'omit',
15689
+ headers: {
15690
+ 'Accept': 'image/*'
15691
+ },
15692
+ cache: 'no-cache',
15693
+ signal: controller.signal
15694
+ };
15695
+ // 添加 fetch priority(如果支持)
15696
+ if ('priority' in fetchOptions) {
15697
+ fetchOptions.priority = this.options.fetchPriority;
15709
15698
  }
15710
- catch (fetchError) {
15711
- clearTimeout(timeoutId);
15712
- throw fetchError;
15699
+ const response = await fetch(proxyUrl, fetchOptions);
15700
+ clearTimeout(timeoutId);
15701
+ if (!response.ok) {
15702
+ throw new Error(`代理请求失败: ${response.status}`);
15713
15703
  }
15704
+ const blob = await response.blob();
15705
+ const dataUrl = await this.blobToDataUrl(blob);
15706
+ // 缓存结果(带时间戳,10分钟有效)
15707
+ this.setCachedImage(url, dataUrl);
15708
+ return dataUrl;
15714
15709
  }
15715
- catch (error) {
15716
- if (!this.options.silentMode) {
15717
- console.warn(`📸 代理处理图片失败: ${url.substring(0, 100)}...`, error);
15718
- }
15719
- // 失败时返回原 URL
15720
- return url;
15710
+ catch (fetchError) {
15711
+ clearTimeout(timeoutId);
15712
+ throw fetchError;
15721
15713
  }
15722
15714
  }
15723
- // 如果没有配置代理,需要添加内存保护机制
15724
- // 不使用代理时,modern-screenshot 会直接下载图片,可能导致内存问题
15725
- // 由于已配置 CORS,可以直接下载并检查大小
15726
- if (this.options.enableCORS) {
15727
- // 对于不使用代理的情况,添加内存保护和缓存机制:
15728
- // 1. 先检查内存缓存(避免重复下载)
15729
- // 2. 检查 IndexedDB 缓存
15730
- // 3. 使用下载队列避免并发重复下载
15731
- // 4. 下载时检查大小,如果过大则使用占位符
15732
- // 先检查内存缓存(优先使用缓存,避免重复下载)
15733
- const cachedDataUrl = this.getCachedImage(url);
15734
- if (cachedDataUrl) {
15735
- if (!this.options.silentMode) {
15736
- console.log(`📸 ✅ 使用内存缓存图片(无代理模式): ${url.substring(0, 50)}...`);
15737
- }
15738
- return cachedDataUrl;
15739
- }
15740
- // 检查是否正在下载(避免重复下载)
15741
- if (this.imageDownloadQueue.has(url)) {
15742
- // 如果已经在下载队列中,等待现有下载完成
15743
- if (!this.options.silentMode) {
15744
- console.log(`📸 ⏳ 等待图片下载完成: ${url.substring(0, 50)}...`);
15745
- }
15746
- return await this.imageDownloadQueue.get(url);
15747
- }
15748
- // 检查并发下载数限制
15749
- if (this.activeDownloads.size >= this.maxConcurrentImageDownloads) {
15750
- // 并发数已满,返回原 URL,让 modern-screenshot 自己处理(可能会失败,但不阻塞)
15751
- if (!this.options.silentMode) {
15752
- console.warn(`📸 ⚠️ 并发下载数已满(${this.activeDownloads.size}/${this.maxConcurrentImageDownloads}),跳过: ${url.substring(0, 50)}...`);
15753
- }
15754
- return url;
15755
- }
15756
- // 创建下载 Promise 并加入队列
15757
- const downloadPromise = this.downloadImageWithoutProxy(url);
15758
- this.imageDownloadQueue.set(url, downloadPromise);
15759
- this.activeDownloads.add(url);
15760
- try {
15761
- const result = await downloadPromise;
15762
- return result;
15763
- }
15764
- finally {
15765
- // 下载完成后清理
15766
- this.imageDownloadQueue.delete(url);
15767
- this.activeDownloads.delete(url);
15715
+ catch (error) {
15716
+ if (!this.options.silentMode) {
15717
+ console.warn(`📸 代理处理图片失败: ${url.substring(0, 100)}...`, error);
15768
15718
  }
15719
+ // 失败时返回原 URL,让 modern-screenshot 自己处理
15720
+ return url;
15769
15721
  }
15770
- // 默认返回原 URL
15771
- return url;
15772
15722
  };
15773
15723
  // 检查元素是否可见且有尺寸
15774
15724
  const rect = element.getBoundingClientRect();
@@ -15812,13 +15762,16 @@ class ScreenshotManager {
15812
15762
  const contextOptions = {
15813
15763
  workerNumber, // Worker 数量,> 0 启用 Worker 模式
15814
15764
  quality: finalQuality, // 图片质量(0-1),已优化为更低的值以减少 base64 大小
15815
- fetchFn: handleCrossOriginImage, // 使用代理服务器处理跨域图片
15816
- fetch: {
15817
- requestInit: {
15818
- cache: 'no-cache',
15765
+ // 只有在配置了代理时才传递 fetchFn,否则让 modern-screenshot 自己处理(性能更好)
15766
+ ...(shouldUseProxy ? {
15767
+ fetchFn: handleCrossOriginImage, // 使用代理服务器处理跨域图片
15768
+ fetch: {
15769
+ requestInit: {
15770
+ cache: 'no-cache',
15771
+ },
15772
+ bypassingCache: true,
15819
15773
  },
15820
- bypassingCache: true,
15821
- },
15774
+ } : {}),
15822
15775
  // 设置最大 canvas 尺寸,防止生成过大的 canvas(避免内存问题)
15823
15776
  // 参考: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/canvas#maximum_canvas_size
15824
15777
  // 大多数浏览器限制为 16,777,216 像素(4096x4096),这里设置为更保守的值
@@ -15634,7 +15634,10 @@ class ScreenshotManager {
15634
15634
  // 对于 body 元素,已经使用了 window.innerWidth/innerHeight,所以直接使用压缩尺寸即可
15635
15635
  const finalWidth = width;
15636
15636
  const finalHeight = height;
15637
- // 处理跨域图片的函数
15637
+ // 判断是否使用代理
15638
+ const shouldUseProxy = this.options.useProxy && this.options.proxyUrl && this.options.proxyUrl.trim() !== '';
15639
+ // 处理跨域图片的函数(仅在配置了代理时使用)
15640
+ // 注意:这个函数只在 shouldUseProxy 为 true 时才会被传递给 modern-screenshot
15638
15641
  const handleCrossOriginImage = async (url) => {
15639
15642
  // 如果是 data URL 或 blob URL,直接返回
15640
15643
  if (url.startsWith('data:') || url.startsWith('blob:')) {
@@ -15650,121 +15653,68 @@ class ScreenshotManager {
15650
15653
  catch (e) {
15651
15654
  // URL 解析失败,继续处理
15652
15655
  }
15653
- // 如果配置了代理服务器,使用代理处理跨域图片
15654
- // 只有当 useProxy 为 true 且 proxyUrl 存在时才使用代理
15655
- const shouldUseProxy = this.options.useProxy && this.options.proxyUrl && this.options.proxyUrl.trim() !== '';
15656
- if (shouldUseProxy) {
15657
- // 检查内存缓存(优先使用缓存,带过期时间检查)
15658
- const cachedDataUrl = this.getCachedImage(url);
15659
- if (cachedDataUrl) {
15660
- if (!this.options.silentMode) {
15661
- console.log(`📸 ✅ 使用内存缓存图片: ${url.substring(0, 50)}...`);
15662
- }
15663
- return cachedDataUrl;
15656
+ // 使用代理处理跨域图片
15657
+ // 检查内存缓存(优先使用缓存,带过期时间检查)
15658
+ const cachedDataUrl = this.getCachedImage(url);
15659
+ if (cachedDataUrl) {
15660
+ if (!this.options.silentMode) {
15661
+ console.log(`📸 使用内存缓存图片: ${url.substring(0, 50)}...`);
15664
15662
  }
15663
+ return cachedDataUrl;
15664
+ }
15665
+ try {
15666
+ // 构建代理请求参数
15667
+ const params = new URLSearchParams({
15668
+ url: url,
15669
+ maxWidth: String(this.options.maxWidth || 1600),
15670
+ maxHeight: String(this.options.maxHeight || 900),
15671
+ quality: String(Math.round((this.options.quality || 0.4) * 100)),
15672
+ format: this.options.outputFormat || 'webp'
15673
+ });
15674
+ let baseUrl = this.options.proxyUrl;
15675
+ baseUrl = baseUrl.replace(/[?&]$/, '');
15676
+ const proxyUrl = `${baseUrl}?${params.toString()}`;
15677
+ // 请求代理服务器(优化:添加超时控制和优先级)
15678
+ const controller = new AbortController();
15679
+ const timeoutId = setTimeout(() => controller.abort(), this.options.imageLoadTimeout);
15665
15680
  try {
15666
- // 构建代理请求参数
15667
- const params = new URLSearchParams({
15668
- url: url,
15669
- maxWidth: String(this.options.maxWidth || 1600),
15670
- maxHeight: String(this.options.maxHeight || 900),
15671
- quality: String(Math.round((this.options.quality || 0.4) * 100)),
15672
- format: this.options.outputFormat || 'webp'
15673
- });
15674
- let baseUrl = this.options.proxyUrl;
15675
- baseUrl = baseUrl.replace(/[?&]$/, '');
15676
- const proxyUrl = `${baseUrl}?${params.toString()}`;
15677
- // 请求代理服务器(优化:添加超时控制和优先级)
15678
- const controller = new AbortController();
15679
- const timeoutId = setTimeout(() => controller.abort(), this.options.imageLoadTimeout);
15680
- try {
15681
- const fetchOptions = {
15682
- method: 'GET',
15683
- mode: 'cors',
15684
- credentials: 'omit',
15685
- headers: {
15686
- 'Accept': 'image/*'
15687
- },
15688
- cache: 'no-cache',
15689
- signal: controller.signal
15690
- };
15691
- // 添加 fetch priority(如果支持)
15692
- if ('priority' in fetchOptions) {
15693
- fetchOptions.priority = this.options.fetchPriority;
15694
- }
15695
- const response = await fetch(proxyUrl, fetchOptions);
15696
- clearTimeout(timeoutId);
15697
- if (!response.ok) {
15698
- throw new Error(`代理请求失败: ${response.status}`);
15699
- }
15700
- const blob = await response.blob();
15701
- const dataUrl = await this.blobToDataUrl(blob);
15702
- // 缓存结果(带时间戳,10分钟有效)
15703
- this.setCachedImage(url, dataUrl);
15704
- return dataUrl;
15681
+ const fetchOptions = {
15682
+ method: 'GET',
15683
+ mode: 'cors',
15684
+ credentials: 'omit',
15685
+ headers: {
15686
+ 'Accept': 'image/*'
15687
+ },
15688
+ cache: 'no-cache',
15689
+ signal: controller.signal
15690
+ };
15691
+ // 添加 fetch priority(如果支持)
15692
+ if ('priority' in fetchOptions) {
15693
+ fetchOptions.priority = this.options.fetchPriority;
15705
15694
  }
15706
- catch (fetchError) {
15707
- clearTimeout(timeoutId);
15708
- throw fetchError;
15695
+ const response = await fetch(proxyUrl, fetchOptions);
15696
+ clearTimeout(timeoutId);
15697
+ if (!response.ok) {
15698
+ throw new Error(`代理请求失败: ${response.status}`);
15709
15699
  }
15700
+ const blob = await response.blob();
15701
+ const dataUrl = await this.blobToDataUrl(blob);
15702
+ // 缓存结果(带时间戳,10分钟有效)
15703
+ this.setCachedImage(url, dataUrl);
15704
+ return dataUrl;
15710
15705
  }
15711
- catch (error) {
15712
- if (!this.options.silentMode) {
15713
- console.warn(`📸 代理处理图片失败: ${url.substring(0, 100)}...`, error);
15714
- }
15715
- // 失败时返回原 URL
15716
- return url;
15706
+ catch (fetchError) {
15707
+ clearTimeout(timeoutId);
15708
+ throw fetchError;
15717
15709
  }
15718
15710
  }
15719
- // 如果没有配置代理,需要添加内存保护机制
15720
- // 不使用代理时,modern-screenshot 会直接下载图片,可能导致内存问题
15721
- // 由于已配置 CORS,可以直接下载并检查大小
15722
- if (this.options.enableCORS) {
15723
- // 对于不使用代理的情况,添加内存保护和缓存机制:
15724
- // 1. 先检查内存缓存(避免重复下载)
15725
- // 2. 检查 IndexedDB 缓存
15726
- // 3. 使用下载队列避免并发重复下载
15727
- // 4. 下载时检查大小,如果过大则使用占位符
15728
- // 先检查内存缓存(优先使用缓存,避免重复下载)
15729
- const cachedDataUrl = this.getCachedImage(url);
15730
- if (cachedDataUrl) {
15731
- if (!this.options.silentMode) {
15732
- console.log(`📸 ✅ 使用内存缓存图片(无代理模式): ${url.substring(0, 50)}...`);
15733
- }
15734
- return cachedDataUrl;
15735
- }
15736
- // 检查是否正在下载(避免重复下载)
15737
- if (this.imageDownloadQueue.has(url)) {
15738
- // 如果已经在下载队列中,等待现有下载完成
15739
- if (!this.options.silentMode) {
15740
- console.log(`📸 ⏳ 等待图片下载完成: ${url.substring(0, 50)}...`);
15741
- }
15742
- return await this.imageDownloadQueue.get(url);
15743
- }
15744
- // 检查并发下载数限制
15745
- if (this.activeDownloads.size >= this.maxConcurrentImageDownloads) {
15746
- // 并发数已满,返回原 URL,让 modern-screenshot 自己处理(可能会失败,但不阻塞)
15747
- if (!this.options.silentMode) {
15748
- console.warn(`📸 ⚠️ 并发下载数已满(${this.activeDownloads.size}/${this.maxConcurrentImageDownloads}),跳过: ${url.substring(0, 50)}...`);
15749
- }
15750
- return url;
15751
- }
15752
- // 创建下载 Promise 并加入队列
15753
- const downloadPromise = this.downloadImageWithoutProxy(url);
15754
- this.imageDownloadQueue.set(url, downloadPromise);
15755
- this.activeDownloads.add(url);
15756
- try {
15757
- const result = await downloadPromise;
15758
- return result;
15759
- }
15760
- finally {
15761
- // 下载完成后清理
15762
- this.imageDownloadQueue.delete(url);
15763
- this.activeDownloads.delete(url);
15711
+ catch (error) {
15712
+ if (!this.options.silentMode) {
15713
+ console.warn(`📸 代理处理图片失败: ${url.substring(0, 100)}...`, error);
15764
15714
  }
15715
+ // 失败时返回原 URL,让 modern-screenshot 自己处理
15716
+ return url;
15765
15717
  }
15766
- // 默认返回原 URL
15767
- return url;
15768
15718
  };
15769
15719
  // 检查元素是否可见且有尺寸
15770
15720
  const rect = element.getBoundingClientRect();
@@ -15808,13 +15758,16 @@ class ScreenshotManager {
15808
15758
  const contextOptions = {
15809
15759
  workerNumber, // Worker 数量,> 0 启用 Worker 模式
15810
15760
  quality: finalQuality, // 图片质量(0-1),已优化为更低的值以减少 base64 大小
15811
- fetchFn: handleCrossOriginImage, // 使用代理服务器处理跨域图片
15812
- fetch: {
15813
- requestInit: {
15814
- cache: 'no-cache',
15761
+ // 只有在配置了代理时才传递 fetchFn,否则让 modern-screenshot 自己处理(性能更好)
15762
+ ...(shouldUseProxy ? {
15763
+ fetchFn: handleCrossOriginImage, // 使用代理服务器处理跨域图片
15764
+ fetch: {
15765
+ requestInit: {
15766
+ cache: 'no-cache',
15767
+ },
15768
+ bypassingCache: true,
15815
15769
  },
15816
- bypassingCache: true,
15817
- },
15770
+ } : {}),
15818
15771
  // 设置最大 canvas 尺寸,防止生成过大的 canvas(避免内存问题)
15819
15772
  // 参考: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/canvas#maximum_canvas_size
15820
15773
  // 大多数浏览器限制为 16,777,216 像素(4096x4096),这里设置为更保守的值