Расширение Chrome работает только после обновления страницыJavascript

Форум по Javascript
Ответить
Anonymous
 Расширение Chrome работает только после обновления страницы

Сообщение Anonymous »

Я делаю свое первое расширение Chrome, идея: когда таблица в моих случаях Salesforce содержит любое слово, которое я даю, она выбирает в цвете, который я выбрал для этого слова. < /p>
Все дело работает так, как я хочу, единственная проблема, с которой у меня есть, это то, что мне сначала нужно нажмите обновить, когда я открываю новую вкладку. После нажатия обновления один раз, он продолжает работать на этой вкладке. < /P>
Это мой контент. chrome.storage.local.get(['preferences'], function (result) {
const preferences = result.preferences || [];
console.log('Opgeslagen voorkeuren:', preferences);

if (preferences.length === 0) {
console.log('Geen voorkeuren ingesteld.');
return;
}

// Functie om Shadow DOM te doorzoeken
const traverseShadowDOM = (node, callback) => {
if (node.nodeType === Node.ELEMENT_NODE) {
if (node.shadowRoot) {
callback(node.shadowRoot);
node.shadowRoot.childNodes.forEach(child => traverseShadowDOM(child, callback));
}
node.childNodes.forEach(child => traverseShadowDOM(child, callback));
}
};

// Pas kleuren toe op rijen, inclusief Shadow DOM
const applyColorsToRows = () => {
let rows = [];
traverseShadowDOM(document.body, (root) => {
const found = root.querySelectorAll('tr[data-row-key-value]');
rows = rows.concat(Array.from(found));
});

if (rows.length > 0) {
console.log('Case-rijen gevonden, toepassing gestart.');
rows.forEach(row => {
const statusCell = row.querySelector('td[data-label="Status"]');
const statusSpan = statusCell?.querySelector('span[title]');
if (statusCell && statusSpan) {
preferences.forEach(preference => {
if (statusSpan.textContent.trim() === preference.status) {
if (preference.applyTo === 'column') {
statusCell.style.backgroundColor = preference.bgColor;
statusCell.style.color = preference.textColor;
} else {
row.style.backgroundColor = preference.bgColor;
row.style.color = preference.textColor;
}
}
});
}
});
}
};

// Verbeterde retry-logica met backoff
let retries = 0;
const maxRetries = 10; // Maximaal 5 seconden (10 * 500ms)
const retryInterval = setInterval(() => {
applyColorsToRows();
if (retries >= maxRetries) clearInterval(retryInterval);
retries++;
}, 500);

// MutationObserver voor toekomstige wijzigingen
const observer = new MutationObserver(applyColorsToRows);
observer.observe(document.body, { childList: true, subtree: true });
});
< /code>
Это manifest.js: < /p>
{
"manifest_version": 3,
"name": "BetterBetterLists for Salesforce",
"version": "1.0",
"permissions": [
"storage"
],
"background": {
"service_worker": "background.js"
},
"content_scripts": [
{
"matches": ["https://rogiers.lightning.force.com/lightning/o/Case/*"],
"js": ["content.js"],
"all_frames": true,
"run_at": "document_idle"
}
],
"action": {
"default_popup": "popup.html",
"default_icon": {
"16": "icon.png",
"48": "icon.png",
"128": "icon.png"
}
}
< /code>
} < /p>
my founal.js: < /p>
chrome.runtime.onInstalled.addListener(() => {
console.log('BetterLists for Salesforce is geinstalleerd!');
});

// Service worker ontvangt berichten van content scripts of popup
chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
if (message.action === 'getPreferences') {
chrome.storage.local.get(['status', 'color'], function(result) {
sendResponse(result);
});
return true; // Om te wachten op de async reactie
}
});
< /code>
Тогда у меня есть HTML -страница для всплывающего окна, когда она нажимает, но я не буду делиться, что BCS я думаю. иметь возможность помочь, я был бы очень хорош!
Спасибо за ваше время!>

Подробнее здесь: https://stackoverflow.com/questions/794 ... f-the-page
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»