Здравствуйте. Возникла необходимость создать плагин для браузера, с помощью которого требуется получать данные с чужого сайта и обрабатывать их. Ничего незаконного и паразитного, просто расчёты (числа, суммы, средние арифметические и т.д). Но пока тренеруюсь на HTML тегах. Использую браузер Opera последней версии. В работе плагина используется JavaScrypt, поэтому думаю, что форумом не ошибся. Плагин состоит из трёх файлов: manifest.json Код (Text): { "manifest_version": 2, "name": "TEST 1", "description": "Test", "version": "1.0", "background": { }, "permissions": ["tabs","http://*/*"], "sidebar_action": { "default_icon": "icon.png", "default_title": "My Sample Extension", "default_panel": "panel.html" } } panel.html Панель(страница) плагина, на которую будем выводить информацию с сайтов HTML: <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Мой плагин</title> <script src="background.js" type="text/javascript"></script> </head> <body> <div id="timer">00</div> <br> <div id="lght_1">00</div> <div id="txt_1">00</div> <div id="tt_1">00</div> <br> <div id="lght_2">00</div> <div id="lght_2_1">00</div> <div id="txt_2">00</div> <div id="tt_2">00</div> <br> <div id="lght_3">00</div> <div id="txt_3">00</div> <div id="tt_3">00</div> </body> </html> background.js Ну и сам скрипт, который будет должен парсить сайты, пробую это делать тремя способами Код (Javascript): sec = 0; setInterval(tick, 1000); function tick() { var $ = window.jQuery; sec++; document.getElementById("timer").childNodes[0].nodeValue = sec; //Таймер отрабатывает /// TEST-1 [querySelector] chrome.tabs.executeScript(null, {code: "document.querySelector('p').innerHTML"}, (results)=> {document.getElementById("txt_1").childNodes[0].nodeValue = "Текст " + results;}); //Возвращает текст между первыми тегами <p></p> Тут всё ок /// TEST-2 [querySelectorAll] chrome.tabs.executeScript(null, {code: "document.querySelectorAll('p').length"}, (results)=> {document.getElementById("lght_2").childNodes[0].nodeValue = "Длина массива " + results;}); //Возвращает правильное значение, Тут всё ок //А вот так, уже не работает: chrome.tabs.executeScript(null, {code: "document.querySelectorAll('p')"}, (results)=> { document.getElementById("lght_2_1").childNodes[0].nodeValue = "Длина массива " + results.length; console.log(results);//В консоли возвращает какой-то странный массив и как с ним работать мне не понятно }); chrome.tabs.executeScript(null, {code: "document.querySelectorAll('p').innerHTML"}, (results)=> {document.getElementById("txt_2").childNodes[0].nodeValue = "Текст " + results[0];}); //Возвращает null /// TEST-3 [jQuery] //тут тоже возвращаются какие-то странные массивы, но тоже хочу разобраться, по этому прошу помощи chrome.tabs.executeScript(null, {code: "$('p')"}, (results)=> { document.getElementById("lght_3").childNodes[0].nodeValue = "Длина массива " + results.length; document.getElementById("txt_3").childNodes[0].nodeValue = results[0]; }); }; Вот возвращаемый массив: в TEST-2 Код (Text): [I][B]Array(1) 0: {} length: 1 __proto__: Array(0) concat: ƒ concat() constructor: ƒ Array() copyWithin: ƒ copyWithin() entries: ƒ entries() every: ƒ every() fill: ƒ fill() filter: ƒ filter() find: ƒ find() findIndex: ƒ findIndex() flat: ƒ flat() flatMap: ƒ flatMap() forEach: ƒ forEach() includes: ƒ includes() indexOf: ƒ indexOf() join: ƒ join() keys: ƒ keys() lastIndexOf: ƒ lastIndexOf() length: 0 map: ƒ map() pop: ƒ pop() push: ƒ push() reduce: ƒ reduce() reduceRight: ƒ reduceRight() reverse: ƒ reverse() shift: ƒ shift() slice: ƒ slice() some: ƒ some() sort: ƒ sort() splice: ƒ splice() toLocaleString: ƒ toLocaleString() toString: ƒ toString() unshift: ƒ unshift() values: ƒ values() Symbol(Symbol.iterator): ƒ values() Symbol(Symbol.unscopables): {copyWithin: true, entries: true, fill: true, find: true, findIndex: true, …} __proto__: Object[/B][/I] Помогите, люди добрые, уже второй день бьюсь.