-
Anonymous
Показать удаленное сообщение WhatsApp
Сообщение
Anonymous »
Я храню удаленное сообщение wastapp с помощью data-id , используя этот код
Код: Выделить всё
(function () {
let messageCache = new Map();
function extractMessageContent(element) {
let messageContainer = element.querySelector("[data-pre-plain-text]");
let messageText = element.querySelector(".selectable-text");
let mediaContainer = element.querySelector(".media-container");
let timestampElement = element.querySelector("div[data-pre-plain-text]");
let timestamp = "";
let sender = "";
let mediaUrl = "";
let mediaName = "";
if (timestampElement) {
let preText = timestampElement.getAttribute("data-pre-plain-text");
if (preText) {
let matches = preText.match(/\\[(.*?)\\].*?([^:]+):/);
if (matches) {
timestamp = matches[1];
sender = matches[2].trim();
}
}
}
if (mediaContainer) {
let mediaElement = mediaContainer.querySelector("img, video");
if (mediaElement) {
mediaUrl = mediaElement.src;
mediaName = mediaElement.alt || mediaElement.src.split("/").pop();
}
}
return {
id: element.getAttribute("data-id"),
text: messageText ? messageText.innerText : "",
sender: sender,
timestamp: timestamp,
hasMedia: !!mediaContainer,
mediaUrl: mediaUrl,
mediaName: mediaName,
};
}
const messageObserver = new MutationObserver((mutations) => {
mutations.forEach((mutation) => {
if (mutation.type === "childList") {
mutation.addedNodes.forEach((node) => {
if (node.nodeType === Node.ELEMENT_NODE) {
let messageElement = node.querySelector("[data-id]");
if (messageElement) {
console.log("add", node);
let message = extractMessageContent(messageElement);
messageCache.set(message.id, message);
}
}
});
mutation.removedNodes.forEach((node) => {
if (node.nodeType === Node.ELEMENT_NODE) {
let messageElement = node.querySelector("[data-id]");
if (messageElement) {
let messageId = messageElement.getAttribute("data-id");
let cachedMessage = messageCache.get(messageId);
console.log("remove", node);
if (cachedMessage) {
// window.webkit.messageHandlers.messageObserver.postMessage({
// type: "messageDeleted",
// data: cachedMessage,
// });
messageCache.delete(messageId);
}
}
}
});
}
});
});
function observeChat() {
const chatContainer = document.querySelector("#main div.copyable-area");
if (chatContainer) {
messageObserver.observe(chatContainer, {
childList: true,
subtree: true,
});
} else {
setTimeout(observeChat, 1000);
}
}
function initObserver() {
if (document.querySelector("#app")) {
observeChat();
} else {
setTimeout(initObserver, 1000);
}
}
initObserver();
})();
Но я получаю новые данные data-id в этом удаленном сообщении.
Как я могу показать это удаленное сообщение в это место ?
Подробнее здесь:
https://stackoverflow.com/questions/794 ... pp-message
1740066402
Anonymous
Я храню удаленное сообщение wastapp с помощью data-id , используя этот код
[code](function () {
let messageCache = new Map();
function extractMessageContent(element) {
let messageContainer = element.querySelector("[data-pre-plain-text]");
let messageText = element.querySelector(".selectable-text");
let mediaContainer = element.querySelector(".media-container");
let timestampElement = element.querySelector("div[data-pre-plain-text]");
let timestamp = "";
let sender = "";
let mediaUrl = "";
let mediaName = "";
if (timestampElement) {
let preText = timestampElement.getAttribute("data-pre-plain-text");
if (preText) {
let matches = preText.match(/\\[(.*?)\\].*?([^:]+):/);
if (matches) {
timestamp = matches[1];
sender = matches[2].trim();
}
}
}
if (mediaContainer) {
let mediaElement = mediaContainer.querySelector("img, video");
if (mediaElement) {
mediaUrl = mediaElement.src;
mediaName = mediaElement.alt || mediaElement.src.split("/").pop();
}
}
return {
id: element.getAttribute("data-id"),
text: messageText ? messageText.innerText : "",
sender: sender,
timestamp: timestamp,
hasMedia: !!mediaContainer,
mediaUrl: mediaUrl,
mediaName: mediaName,
};
}
const messageObserver = new MutationObserver((mutations) => {
mutations.forEach((mutation) => {
if (mutation.type === "childList") {
mutation.addedNodes.forEach((node) => {
if (node.nodeType === Node.ELEMENT_NODE) {
let messageElement = node.querySelector("[data-id]");
if (messageElement) {
console.log("add", node);
let message = extractMessageContent(messageElement);
messageCache.set(message.id, message);
}
}
});
mutation.removedNodes.forEach((node) => {
if (node.nodeType === Node.ELEMENT_NODE) {
let messageElement = node.querySelector("[data-id]");
if (messageElement) {
let messageId = messageElement.getAttribute("data-id");
let cachedMessage = messageCache.get(messageId);
console.log("remove", node);
if (cachedMessage) {
// window.webkit.messageHandlers.messageObserver.postMessage({
// type: "messageDeleted",
// data: cachedMessage,
// });
messageCache.delete(messageId);
}
}
}
});
}
});
});
function observeChat() {
const chatContainer = document.querySelector("#main div.copyable-area");
if (chatContainer) {
messageObserver.observe(chatContainer, {
childList: true,
subtree: true,
});
} else {
setTimeout(observeChat, 1000);
}
}
function initObserver() {
if (document.querySelector("#app")) {
observeChat();
} else {
setTimeout(initObserver, 1000);
}
}
initObserver();
})();
[/code]
Но я получаю новые данные data-id в этом удаленном сообщении.
Как я могу показать это удаленное сообщение в это место ?
Подробнее здесь: [url]https://stackoverflow.com/questions/79455072/show-deleted-whatsapp-message[/url]