Как запустить content script после загрузки всех скриптов сайта?

Мне нужно изменить значение инпута, загружающегося из js, на сайте

document.getElementById("name").value= "Jack";

И в консоли мне выдает ошибку Error handling response: TypeError: Cannot set property 'value' of null

Можно ли как-то дождаться загрузки элемента и выполнить content script?

manifest.json

    "manifest_version": 2,
    "name": "extension",
    "description": "change value ",
    "version": "0.1.0",
    },
    
    "content_scripts": [ {
      "js": [ "/js/changeval.js" ],
      "run_at": "document_end",
      "matches": [ "<all_urls>" ]
   }
 ],   
"permissions": [
    "storage"
  ]  
}

changeval.js

document.getElementById("name").value= "Jack";

Ответы (1 шт):

Автор решения: Roman

DOMContentLoaded генерируется после того как DOM уже будет сформирован:

document.addEventListener("DOMContentLoaded", () => {
    document.getElementById("name").value= "Jack"
});

Можно передать туда функцию, и в ней выполнять всю логику:

document.addEventListener("DOMContentLoaded", myFunc);

function myFunc() {
   document.getElementById("name").value= "Jack"   
}

Второй вариант:

window.onload = function() {
    document.getElementById("name").value= "Jack"
}

Вариант с addEventListener("DOMContentLoaded" ... более предпочтителен, так как не ждет загрузки внешних ресурсов, таких как картинки и стили, в отличии от window.onload

Также есть вариант addEventListener("load", () => {}, который используется для отслеживания полностью загруженной страницы. Работает как и window.onload, но имеет преимущества addEventListener-a, с помощью которого можно повесить несколько обработчиков на один элемент, и также удалить обработчики используя removeEventListener

→ Ссылка