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.
- package/dist/core/ScreenshotManager.d.ts.map +1 -1
- package/dist/customer-sdk.cjs.js +66 -113
- package/dist/customer-sdk.esm.js +66 -113
- package/dist/customer-sdk.min.js +2 -2
- package/package.json +1 -1
|
@@ -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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"}
|
package/dist/customer-sdk.cjs.js
CHANGED
|
@@ -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
|
-
//
|
|
15659
|
-
const
|
|
15660
|
-
if (
|
|
15661
|
-
|
|
15662
|
-
|
|
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
|
-
|
|
15672
|
-
|
|
15673
|
-
|
|
15674
|
-
|
|
15675
|
-
|
|
15676
|
-
|
|
15677
|
-
|
|
15678
|
-
|
|
15679
|
-
|
|
15680
|
-
|
|
15681
|
-
|
|
15682
|
-
|
|
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
|
-
|
|
15711
|
-
|
|
15712
|
-
|
|
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 (
|
|
15716
|
-
|
|
15717
|
-
|
|
15718
|
-
}
|
|
15719
|
-
// 失败时返回原 URL
|
|
15720
|
-
return url;
|
|
15710
|
+
catch (fetchError) {
|
|
15711
|
+
clearTimeout(timeoutId);
|
|
15712
|
+
throw fetchError;
|
|
15721
15713
|
}
|
|
15722
15714
|
}
|
|
15723
|
-
|
|
15724
|
-
|
|
15725
|
-
|
|
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
|
|
15816
|
-
|
|
15817
|
-
|
|
15818
|
-
|
|
15765
|
+
// 只有在配置了代理时才传递 fetchFn,否则让 modern-screenshot 自己处理(性能更好)
|
|
15766
|
+
...(shouldUseProxy ? {
|
|
15767
|
+
fetchFn: handleCrossOriginImage, // 使用代理服务器处理跨域图片
|
|
15768
|
+
fetch: {
|
|
15769
|
+
requestInit: {
|
|
15770
|
+
cache: 'no-cache',
|
|
15771
|
+
},
|
|
15772
|
+
bypassingCache: true,
|
|
15819
15773
|
},
|
|
15820
|
-
|
|
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),这里设置为更保守的值
|
package/dist/customer-sdk.esm.js
CHANGED
|
@@ -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
|
-
//
|
|
15655
|
-
const
|
|
15656
|
-
if (
|
|
15657
|
-
|
|
15658
|
-
|
|
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
|
-
|
|
15668
|
-
|
|
15669
|
-
|
|
15670
|
-
|
|
15671
|
-
|
|
15672
|
-
|
|
15673
|
-
|
|
15674
|
-
|
|
15675
|
-
|
|
15676
|
-
|
|
15677
|
-
|
|
15678
|
-
|
|
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
|
-
|
|
15707
|
-
|
|
15708
|
-
|
|
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 (
|
|
15712
|
-
|
|
15713
|
-
|
|
15714
|
-
}
|
|
15715
|
-
// 失败时返回原 URL
|
|
15716
|
-
return url;
|
|
15706
|
+
catch (fetchError) {
|
|
15707
|
+
clearTimeout(timeoutId);
|
|
15708
|
+
throw fetchError;
|
|
15717
15709
|
}
|
|
15718
15710
|
}
|
|
15719
|
-
|
|
15720
|
-
|
|
15721
|
-
|
|
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
|
|
15812
|
-
|
|
15813
|
-
|
|
15814
|
-
|
|
15761
|
+
// 只有在配置了代理时才传递 fetchFn,否则让 modern-screenshot 自己处理(性能更好)
|
|
15762
|
+
...(shouldUseProxy ? {
|
|
15763
|
+
fetchFn: handleCrossOriginImage, // 使用代理服务器处理跨域图片
|
|
15764
|
+
fetch: {
|
|
15765
|
+
requestInit: {
|
|
15766
|
+
cache: 'no-cache',
|
|
15767
|
+
},
|
|
15768
|
+
bypassingCache: true,
|
|
15815
15769
|
},
|
|
15816
|
-
|
|
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),这里设置为更保守的值
|