У меня есть расширение Chrome, которое срабатывает при нажатии кнопки, расширение по-прежнему не может получить доступ к элементам DOM, даже если страница явно загружена.
Я видел, что другие посты говорят, что это потому, что элементы создаются динамически, но не в моем случае.
Единственное, что работает, - это обернуть мой debugTools.js в тайм-аут изапустить его примерно через 800 миллисекунд.
Код внутри debugTools.js - это неработающая часть.Я не понимаю, почему слово «theWrapper» не определено, даже если я жду 10 минут, прежде чем нажать мою кнопку, которая выполняет код.
Обертка определенно существует на странице, на которую я перехожу, прежде чем нажимать мою кнопку.Это есть в обычном коде HMTL.Не генерируется динамически.Я чувствую, что размещение этого кода страницы просто запутает вопрос.
// manifest.json
{
"name": "Jams Dev Tools",
"version": "1.0",
"description": "Provides dev tools",
"background": {
"scripts": ["background.js"],
"persistent": true
},
... // icons are included here
"manifest_version": 2,
"web_accessible_resources": [
"debugTools.css",
"debugTools.js"
],
"permissions": [
"https://*/*",
"http://*/*",
"tabs",
"activeTab"
]
}
// debugTools.js
var theWrapper = document.getElementById("wrapper");
console.log(theWrapper.style.width);
// injectFiles.js
if(document.getElementById("debugJs") == undefined) {
// Inject Css
var debugJs = document.createElement('script');
var theSource = chrome.extension.getURL("debugTools.js");
debugJs.setAttribute( 'src', theSource );
debugJs.id = "debugJs";
document.body.appendChild(debugJs);
}
// background.js
chrome.browserAction.onClicked.addListener(function (tab) {
// for the current tab, inject the "inject.js" file & execute it
chrome.tabs.executeScript(tab.id, {
file: 'injectFiles.js'
});
});