Расширение Chrome, добавление элемента и повторное добавление при изменении страницы

#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. Спасибо за совет! Я надеюсь, что есть более простой способ, но если нет, я обязательно отмечу ваш ответ как принятый!