Я делаю свое первое расширение 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
Расширение Chrome работает только после обновления страницы ⇐ Javascript
Форум по Javascript
-
Anonymous
1740401949
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 я думаю. иметь возможность помочь, я был бы очень хорош!
Спасибо за ваше время!>
Подробнее здесь: [url]https://stackoverflow.com/questions/79463612/chrome-extension-only-working-after-a-refresh-of-the-page[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия