customer-chat-sdk 1.1.3 → 1.1.4
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.
|
@@ -52,6 +52,10 @@ export declare class IframeManager {
|
|
|
52
52
|
* 向iframe发送消息
|
|
53
53
|
*/
|
|
54
54
|
sendToIframe(data: any): void;
|
|
55
|
+
/**
|
|
56
|
+
* 清理页面上孤立的遮罩层和容器元素(防止重复创建)
|
|
57
|
+
*/
|
|
58
|
+
private cleanupOrphanedElements;
|
|
55
59
|
/**
|
|
56
60
|
* 创建遮罩层(PC模式使用)
|
|
57
61
|
* @param showImmediately 是否立即显示,默认 false(用于 init() 时创建但不显示)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IframeManager.d.ts","sourceRoot":"","sources":["../../src/core/IframeManager.ts"],"names":[],"mappings":"AACA,UAAU,aAAa;IACrB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,GAAG,YAAY,GAAG,OAAO,CAAA;IACtC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,SAAS,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,IAAI,CAAA;IACpD,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,aAAa,CAAiC;IACtD,OAAO,CAAC,cAAc,CAA2B;IACjD,OAAO,CAAC,gBAAgB,CAA2B;IACnD,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,KAAK,CAAiB;gBAElB,MAAM,GAAE,aAAkB;IActC;;;OAGG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"IframeManager.d.ts","sourceRoot":"","sources":["../../src/core/IframeManager.ts"],"names":[],"mappings":"AACA,UAAU,aAAa;IACrB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,GAAG,YAAY,GAAG,OAAO,CAAA;IACtC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,SAAS,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,IAAI,CAAA;IACpD,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,aAAa,CAAiC;IACtD,OAAO,CAAC,cAAc,CAA2B;IACjD,OAAO,CAAC,gBAAgB,CAA2B;IACnD,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,KAAK,CAAiB;gBAElB,MAAM,GAAE,aAAkB;IActC;;;OAGG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA8B3B;;OAEG;IACH,IAAI,IAAI,IAAI;IA2FZ;;OAEG;IACH,IAAI,IAAI,IAAI;IAIZ;;OAEG;IACH,IAAI,IAAI,IAAI;IA0CZ;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,OAAO,IAAI,IAAI;IAqBf;;OAEG;IACH,YAAY,IAAI,OAAO;IAIvB;;OAEG;IACH,YAAY,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI;IAM7B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAwB/B;;;OAGG;IACH,OAAO,CAAC,aAAa;IAmDrB;;OAEG;IACH,OAAO,CAAC,YAAY;IA8IpB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA8D1B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAoCzB;;OAEG;IACH,OAAO,CAAC,cAAc;IAKtB;;;OAGG;IACH,OAAO,CAAC,aAAa;IAOrB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAS5B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAwD3B;;OAEG;IACH,OAAO,CAAC,YAAY;CAMrB"}
|
package/dist/customer-sdk.cjs.js
CHANGED
|
@@ -627,6 +627,9 @@ class IframeManager {
|
|
|
627
627
|
*/
|
|
628
628
|
async init() {
|
|
629
629
|
try {
|
|
630
|
+
// 关键修复:在初始化前,先清理页面上所有旧的遮罩层和容器元素
|
|
631
|
+
// 防止切换模式或多次初始化时产生重复的元素
|
|
632
|
+
this.cleanupOrphanedElements();
|
|
630
633
|
// PC模式:预创建遮罩层(隐藏状态),避免后续移动DOM导致iframe重新加载
|
|
631
634
|
const actualMode = this.getActualMode();
|
|
632
635
|
const isPC = actualMode === 'popup';
|
|
@@ -819,6 +822,31 @@ class IframeManager {
|
|
|
819
822
|
this.iframeElement.contentWindow.postMessage(data, '*');
|
|
820
823
|
}
|
|
821
824
|
}
|
|
825
|
+
/**
|
|
826
|
+
* 清理页面上孤立的遮罩层和容器元素(防止重复创建)
|
|
827
|
+
*/
|
|
828
|
+
cleanupOrphanedElements() {
|
|
829
|
+
// 清理所有旧的遮罩层元素(不属于当前实例的)
|
|
830
|
+
const existingOverlays = document.querySelectorAll('.customer-sdk-overlay');
|
|
831
|
+
existingOverlays.forEach((overlay) => {
|
|
832
|
+
if (overlay !== this.overlayElement) {
|
|
833
|
+
overlay.remove();
|
|
834
|
+
if (this.debug) {
|
|
835
|
+
console.log('清理旧的遮罩层元素');
|
|
836
|
+
}
|
|
837
|
+
}
|
|
838
|
+
});
|
|
839
|
+
// 清理所有旧的容器元素(不属于当前实例的)
|
|
840
|
+
const existingContainers = document.querySelectorAll('.customer-sdk-container');
|
|
841
|
+
existingContainers.forEach((container) => {
|
|
842
|
+
if (container !== this.containerElement) {
|
|
843
|
+
container.remove();
|
|
844
|
+
if (this.debug) {
|
|
845
|
+
console.log('清理旧的容器元素');
|
|
846
|
+
}
|
|
847
|
+
}
|
|
848
|
+
});
|
|
849
|
+
}
|
|
822
850
|
/**
|
|
823
851
|
* 创建遮罩层(PC模式使用)
|
|
824
852
|
* @param showImmediately 是否立即显示,默认 false(用于 init() 时创建但不显示)
|
package/dist/customer-sdk.esm.js
CHANGED
|
@@ -623,6 +623,9 @@ class IframeManager {
|
|
|
623
623
|
*/
|
|
624
624
|
async init() {
|
|
625
625
|
try {
|
|
626
|
+
// 关键修复:在初始化前,先清理页面上所有旧的遮罩层和容器元素
|
|
627
|
+
// 防止切换模式或多次初始化时产生重复的元素
|
|
628
|
+
this.cleanupOrphanedElements();
|
|
626
629
|
// PC模式:预创建遮罩层(隐藏状态),避免后续移动DOM导致iframe重新加载
|
|
627
630
|
const actualMode = this.getActualMode();
|
|
628
631
|
const isPC = actualMode === 'popup';
|
|
@@ -815,6 +818,31 @@ class IframeManager {
|
|
|
815
818
|
this.iframeElement.contentWindow.postMessage(data, '*');
|
|
816
819
|
}
|
|
817
820
|
}
|
|
821
|
+
/**
|
|
822
|
+
* 清理页面上孤立的遮罩层和容器元素(防止重复创建)
|
|
823
|
+
*/
|
|
824
|
+
cleanupOrphanedElements() {
|
|
825
|
+
// 清理所有旧的遮罩层元素(不属于当前实例的)
|
|
826
|
+
const existingOverlays = document.querySelectorAll('.customer-sdk-overlay');
|
|
827
|
+
existingOverlays.forEach((overlay) => {
|
|
828
|
+
if (overlay !== this.overlayElement) {
|
|
829
|
+
overlay.remove();
|
|
830
|
+
if (this.debug) {
|
|
831
|
+
console.log('清理旧的遮罩层元素');
|
|
832
|
+
}
|
|
833
|
+
}
|
|
834
|
+
});
|
|
835
|
+
// 清理所有旧的容器元素(不属于当前实例的)
|
|
836
|
+
const existingContainers = document.querySelectorAll('.customer-sdk-container');
|
|
837
|
+
existingContainers.forEach((container) => {
|
|
838
|
+
if (container !== this.containerElement) {
|
|
839
|
+
container.remove();
|
|
840
|
+
if (this.debug) {
|
|
841
|
+
console.log('清理旧的容器元素');
|
|
842
|
+
}
|
|
843
|
+
}
|
|
844
|
+
});
|
|
845
|
+
}
|
|
818
846
|
/**
|
|
819
847
|
* 创建遮罩层(PC模式使用)
|
|
820
848
|
* @param showImmediately 是否立即显示,默认 false(用于 init() 时创建但不显示)
|