Skip to content

Commit c047325

Browse files
steveseguinactions-user
authored andcommitted
fix(kwai): Allow concurrent observation of chat and feed
Previously, the Kwai integration utilized a single `MutationObserver` instance to monitor both chat comments and feed events. This could lead to issues where only one type of event was reliably observed or where the observer was unnecessarily reset. This change introduces dedicated `MutationObserver` instances for Kwai chat (`info-chat-comment`) and feed (`info-feed-list`) containers in `sources/kwai.js`. - Replaced single `observer` and `isWatching` variables with `chatObserver` and `feedObserver`. - Ensures both chat messages and feed events are continuously monitored without conflict. - Improves reliability and efficiency of Kwai event processing, building on recent Kwai support. [auto-enhanced]
1 parent 5a995d3 commit c047325

File tree

1 file changed

+38
-45
lines changed

1 file changed

+38
-45
lines changed

sources/kwai.js

Lines changed: 38 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -190,33 +190,25 @@
190190
);
191191

192192
var lastURL = window.location.href;
193-
var observer = null;
194-
var isWatching = false;
195-
196-
function resetObserver() {
197-
if (observer) {
198-
try {
199-
observer.disconnect();
200-
} catch (e) {}
201-
observer = null;
202-
}
203-
isWatching = false;
204-
}
205-
206-
193+
var chatObserver = null;
194+
var feedObserver = null;
195+
207196
function onElementInserted(target, events=false) {
208197
if (!target) {
209198
return;
210199
}
211-
212-
resetObserver();
213-
214-
//console.log(target);
215-
200+
201+
// Determine which observer to use based on events flag
202+
var existingObserver = events ? feedObserver : chatObserver;
203+
204+
// If already observing this target, skip
205+
if (existingObserver) {
206+
return;
207+
}
208+
216209
var onMutationsObserved = function(mutations) {
217210
mutations.forEach(function(mutation) {
218211
if (mutation.addedNodes.length) {
219-
//console.log(mutation.addedNodes);
220212
for (var i = 0, len = mutation.addedNodes.length; i < len; i++) {
221213
try {
222214
if (mutation.addedNodes[i].skip){continue;}
@@ -227,18 +219,19 @@
227219
}
228220
});
229221
};
230-
222+
231223
var config = { childList: true, subtree: false };
232224
var MutationObserver = window.MutationObserver || window.WebKitMutationObserver;
233-
234-
observer = new MutationObserver(onMutationsObserved);
225+
226+
var newObserver = new MutationObserver(onMutationsObserved);
235227
try {
236-
observer.observe(target, config);
237-
//console.log("OBSERVING");
238-
isWatching = true;
228+
newObserver.observe(target, config);
229+
if (events) {
230+
feedObserver = newObserver;
231+
} else {
232+
chatObserver = newObserver;
233+
}
239234
} catch (e) {
240-
observer = null;
241-
isWatching = false;
242235
}
243236
}
244237

@@ -281,25 +274,25 @@
281274

282275
setInterval(function(){
283276
try {
284-
if (!isWatching){
285-
//console.log("searching");
286-
var header = document.querySelector("[class='info-chat-comment']");
287-
if (header){
288-
//console.log("loading?");
289-
onElementInserted(header, false);
277+
// Set up chat observer if not already watching
278+
if (!chatObserver){
279+
var chatContainer = document.querySelector("[class='info-chat-comment']");
280+
if (chatContainer){
281+
onElementInserted(chatContainer, false);
282+
}
290283
}
291-
header = document.querySelector("[class='info-feed-list']");
292-
if (header){
293-
//console.log("loading?");
294-
onElementInserted(header, true);
284+
// Set up feed/events observer if not already watching
285+
if (!feedObserver){
286+
var feedContainer = document.querySelector("[class='info-feed-list']");
287+
if (feedContainer){
288+
onElementInserted(feedContainer, true);
289+
}
295290
}
296-
}
297-
298-
if (isWatching){
299-
checkViewers();
300-
}} catch(e){}
301-
302-
291+
292+
if (chatObserver || feedObserver){
293+
checkViewers();
294+
}
295+
} catch(e){}
303296
},2000);
304297

305298
})();

0 commit comments

Comments
 (0)