Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.04.2017, 18:01
Аватар для 3040
Новичок на форуме
Отправить личное сообщение для 3040 Посмотреть профиль Найти все сообщения от 3040
 
Регистрация: 03.03.2017
Сообщений: 8

background.js
Кто знает, почему когда я использую в background.js onUpdated алерт срабатывает по несколько раз. Минимум 4, а иногда и больше.
chrome.tabs.onUpdated.addListener(function() {
	alert("123");
});


И второй вопрос. Почему из background.js я не могу дотянуться до вкладки? Например я использую text = document.querySelector('#text'), он он всегда пустой. Как используя расширение изменять что-то во вкладке? Заранее спасибо.
Ответить с цитированием
  #2 (permalink)  
Старый 11.04.2017, 00:37
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Сообщение от 3040 Посмотреть сообщение
И второй вопрос. Почему из background.js я не могу дотянуться до вкладки? Например я использую text = document.querySelector('#text'), он он всегда пустой. Как используя расширение изменять что-то во вкладке? Заранее спасибо.
Может DOM еще не построен? нужен полноценный пример
Ответить с цитированием
  #3 (permalink)  
Старый 11.04.2017, 09:38
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,012

Сообщение от 3040
И второй вопрос. Почему из background.js я не могу дотянуться до вкладки? Например я использую text = document.querySelector('#text'), он он всегда пустой. Как используя расширение изменять что-то во вкладке? Заранее спасибо.
Код background.js выполняется на совершенно отдельной, невидимой (и пустой) странице. Чтобы добраться до элемента на вкладке, надо закинуть скрипт на страницу.

А какая у тебя задача? Если надо на неком сайте у себя в браузере что-то делать, то, может, tampermonkey проще взять? Или нужно именно расширение, с некой логикой в бэкграунде?
Ответить с цитированием
  #4 (permalink)  
Старый 11.04.2017, 19:53
Аватар для 3040
Новичок на форуме
Отправить личное сообщение для 3040 Посмотреть профиль Найти все сообщения от 3040
 
Регистрация: 03.03.2017
Сообщений: 8

На моей странице html
<!DOCTYPE html>
<html>
  <body>
    <div id="text">123</div>
 </body>
</html>


А в background.js у меня по идее написано, что когда страница загрузиться, добавить в text мой div и изменись содержимое по клику.

chrome.tabs.onUpdated.addListener(function() {
	var text = document.querySelector('#text');
    text.onclick = function(){
        text.innerHTML = "133";
    };
});


Но расширение сразу выдает ошибку


Т.е. оно врезается в то, что querySelector не достучался до html. И я не знаю как это исправить... Есть ли какие-то способы как из расширения влиять на содержимое страницы?

Последний раз редактировалось 3040, 11.04.2017 в 20:01.
Ответить с цитированием
  #5 (permalink)  
Старый 11.04.2017, 21:51
Профессор
Отправить личное сообщение для SV0L0CH Посмотреть профиль Найти все сообщения от SV0L0CH
 
Регистрация: 07.11.2010
Сообщений: 301

Если надо чтобы действие происходило 1 раз, можно воспользоваться стандартным костылём
chrome.tabs.onUpdated.addListener( (function(first){
    return function() {
        if(first)alert("123");
        first = false;
    }
})(true) );
Ответить с цитированием
  #6 (permalink)  
Старый 12.04.2017, 13:55
Аватар для 3040
Новичок на форуме
Отправить личное сообщение для 3040 Посмотреть профиль Найти все сообщения от 3040
 
Регистрация: 03.03.2017
Сообщений: 8

SV0L0CH,
В моем случае это уже не костыль, а инвалидное кресло.
Этот код срабатывает только при старте браузера на первой странице. На любой другой он уже не работает. А я хочу чтобы код срабатывал на каждой новый вкладке, но только 1 раз.
Ответить с цитированием
  #7 (permalink)  
Старый 12.04.2017, 17:55
Аватар для 3040
Новичок на форуме
Отправить личное сообщение для 3040 Посмотреть профиль Найти все сообщения от 3040
 
Регистрация: 03.03.2017
Сообщений: 8

Всем спасибо! Я разобрался сам. Тему можно закрывать.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
chrome.tabs.sendMessage Артист Общие вопросы Javascript 21 05.12.2016 00:35
Chrome расширение. Пересылка сообщений между popup.js и conten.js чеhtp background.js akokarev Javascript под браузер 1 21.06.2016 14:56