Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   background.js (https://javascript.ru/forum/misc/68325-background-js.html)

3040 09.04.2017 18:01

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


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

j0hnik 11.04.2017 00:37

Цитата:

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

Может DOM еще не построен? нужен полноценный пример

Alexandroppolus 11.04.2017 09:38

Цитата:

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

Код background.js выполняется на совершенно отдельной, невидимой (и пустой) странице. Чтобы добраться до элемента на вкладке, надо закинуть скрипт на страницу.

А какая у тебя задача? Если надо на неком сайте у себя в браузере что-то делать, то, может, tampermonkey проще взять? Или нужно именно расширение, с некой логикой в бэкграунде?

3040 11.04.2017 19:53

На моей странице 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. И я не знаю как это исправить... Есть ли какие-то способы как из расширения влиять на содержимое страницы?

SV0L0CH 11.04.2017 21:51

Если надо чтобы действие происходило 1 раз, можно воспользоваться стандартным костылём
chrome.tabs.onUpdated.addListener( (function(first){
    return function() {
        if(first)alert("123");
        first = false;
    }
})(true) );

3040 12.04.2017 13:55

SV0L0CH,
В моем случае это уже не костыль, а инвалидное кресло. :lol:
Этот код срабатывает только при старте браузера на первой странице. На любой другой он уже не работает. А я хочу чтобы код срабатывал на каждой новый вкладке, но только 1 раз.

3040 12.04.2017 17:55

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


Часовой пояс GMT +3, время: 01:10.