Расширение Chrome: TypeError: Невозможно установить свойство 'innerHTML' для null - PullRequest
0 голосов
/ 20 мая 2019

Я не уверен, как DOM загружается для расширений Chrome. Я помещаю свой скрипт (background.js) под все элементы html, но ошибка «не может установить свойство нуля» все равно генерируется.

Вот манифест.json:

{
  "manifest_version": 2,
  "name": "Drill Sergeant",
  "description": "Tracks time spent on 'watchlist' websites",
  "version": "1.0.0",
  "browser_action": {
    "default_popup": "popup.html"
  },
  "background": {"scripts": ["background.js"]},
  "permissions": ["activeTab", "webNavigation", "notifications", "tabs"]
}

Вот HTML:

<body>
    <div class = "visual">
      <img src = "images/drillserg_default.png" width="80px">
    </div>
    <div class = "visual">
      <p id = "dialogue">"halp..."</p>
    </div>
    <div class = "visual">
      <h2 id = "timer">00:00<p>
    </div>
    <script src = background.js></script>
</body>

Вот где .innerHTML входит в мой скрипт (background.js):

chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
   startTimer();
});

function startTimer()
{
  alert("?");
  window.onload = document.getElementById("dialogue").innerHTML = "YOU BETTER WATCH YOURSELF";
  timerOn = false;
}

Странно то, что я полностью удалил 'script src = "background.js" из файла html, и все, что изменилось, это то, что вызовы console.log () из моего скрипта перестали отображаться в консоли; background.js запускается даже без включения скрипта в html. Может быть, фоновый скрипт всегда загружается раньше, чем мои элементы расширения? Будет ли какой-нибудь обходной путь для этого? Я просто хочу изменить текст на моем расширении ...

Спасибо за чтение стены текста!

1 Ответ

0 голосов
/ 20 мая 2019

Я думаю, я знаю, в чем может быть ваша проблема. Прежде чем продолжить разработку расширения для Chrome, приведу несколько советов. Документация по расширению Chrome действительно полезна, и я предлагаю вам прочитать ее и убедиться, что вы понимаете. Когда я начал делать расширение, я пропустил эту часть, и мне потребовалось много времени с большим количеством гнева, пока я не понял основы. Для вашей проблемы, однако, я предполагаю, что вы не объявили backround.js в вашем web_accessible_resources. Просто добавьте это в свой манифест:

"web_accessible_resources": ["background.js"],

Кроме того, вы должны отметить, что: "background": {"scripts": ["background.js"]}, - это не то же самое, что скрипт для вашего всплывающего окна. Сценарий background.js запускается всякий раз, когда открывается браузер вашего пользователя, независимо от того, нажал ли пользователь действие вашего браузера. Подробнее здесь и здесь .

Так что, если было неясно. Причина, по которой ваш элемент #dialogue не определен, заключается в том, что скрипт выполнялся без контекста вашей HTML-страницы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...