#javascript #html #google-chrome #google-chrome-extension
#javascript #HTML #google-chrome #google-chrome-extension
Вопрос:
У меня есть расширение Chrome, которое при нажатии на его кнопку добавляет элемент на текущую страницу. Однако я хочу сохранить этот элемент на разных страницах; то есть, если пользователь нажимает на ссылку, загружается новая страница, а затем добавляется элемент.
Я попытался использовать window.onhashchange
для обнаружения изменений страницы, проверить, был ли добавлен элемент, и если нет, добавить его, но это, похоже, вообще не повлияло. Есть какие-либо советы о том, как это сделать, или если это возможно? (желательно на javascript, без jquery)
Ответ №1:
некоторое общее описание того, как я мог бы это сделать, было бы следующим:
-когда пользователь нажимает на кнопку, добавьте элемент и отправьте сообщение в фоновом режиме, чтобы сохранить эту вкладку (ID)
-добавьте слушателей chrome.tabs.onCreated.addListener amp; onUpdated (в скрипте bg)
-протестируйте вновь созданные и обновленные вкладки с вашими сохраненными
-если вновь созданная / обновленная вкладка является дочерней по отношению к вашей сохраненной вкладке (tabs), введите скрипт для добавления элемента или отправьте сообщение в сценарий содержимого, чтобы добавить элемент
пример для скрипта BG для начала:
chrome.tabs.onCreated.addListener(function(tab) {
console.log('tab id is' tab.id);
console.log('opener is' tab.openerTabId);
});
куча вещей, с которыми нужно быть осторожным:
-openerTabId не определен, если ссылка перетаскивается (расширение для перетаскивания ссылок)
-эти события запускаются несколько раз, поэтому, если вы отправляете сообщение в content script для добавления вашего элемента (или внедрения), сначала проверьте его
что-то вроде
if (yourElement) return;
else //append element
может быть, есть лучшие / более простые способы достичь того, чего вы хотите … не могу думать об этом прямо сейчас
Редактировать:
на самом деле вам не нужен первоначальный обмен сообщениями при нажатии кнопки, потому что прослушиватель для этой кнопки уже находится в скрипте bg, и весь процесс очень прост.
Комментарии:
1. Спасибо за совет! Я надеюсь, что есть более простой способ, но если нет, я обязательно отмечу ваш ответ как принятый!