В настоящее время я разрабатываю расширение Chrome , которое должно отменить мою активность Inte rnet. Итак, прежде всего вот мой код JS (у меня есть только этот файл без учета manifest.json
, jquery.js
и lo go):
function getAllIndexes(arr, val) {
var indexes = [], i = -1;
while ((i = arr.indexOf(val, i+1)) != -1){
indexes.push(i);
}
return indexes
}
chrome.tabs.onUpdated.addListener(function (tabId, info) {
if(info.status === 'complete') {
chrome.tabs.executeScript({
code: "document.documentElement.outerHTML"
}, function(result) {
if (!chrome.runtime.lastError) {
var el = document.createElement( 'html' );
el.innerHTML = result[0];
var scraping = [
{
"url": "",
"title": "",
"text": "",
"ranking_word": {},
"a": [],
"img": [],
"html": ""
}
]
chrome.tabs.query({'active': true, 'lastFocusedWindow': true}, function (tabs) {
scraping[0]["url"]= tabs[0].url;
});
var head = el.getElementsByTagName('head');
for (var i = 0; i < head.length; i++) {
scraping[0]["title"] = head[i].getElementsByTagName('title')[0].innerHTML;
}
var a = el.getElementsByTagName('a');
for (var i = 0; i < a.length; i++) {
scraping[0]["a"].push(a[i].href);
}
var img = el.getElementsByTagName('img');
for (var i = 0; i < img.length; i++) {
scraping[0]["img"].push(img[i].src);
}
var txt = "";
var text_in_body = [];
var body = el.getElementsByTagName('body');
for (var i = 0; i < body.length; i++){txt += body[i].textContent;}
txt = txt.split("\n");
for (var i = 0; i < txt.length; i++){txt[i] = txt[i].split(" ")}
for (var i = 0; i < txt.length; i++) {for (var a = 0; a < txt.length; a++){if (txt[i][a] == " " || txt[i][a] == "" || txt[i][a] == "," || txt[i][a] == "." || txt[i][a] == "!" || txt[i][a] == "?" || txt[i][a] == ";"){delete txt[i][a];}}}
for (var i = 0; i < txt.length; i++) {text_in_body = text_in_body.concat(txt[i])}
scraping[0]["text"] = text_in_body.join(" ");
ranking_word = {}
for (var i = 0; i < text_in_body.length; i++) {
ranking_word[text_in_body[i]] = getAllIndexes(text_in_body, text_in_body[i]).length;
}
scraping[0]["ranking_word"] = ranking_word;
scraping[0]["html"] = result;
var response = $.get("https://api.myjson.com/bins/1e0ybo", function(data, textStatus, jqXHR) {
if (textStatus == "success") {
console.log("%cSuccess: Getting Data", 'background-color: #8cc2e6; color: #000');
console.log(response.responseJSON);
console.log(scraping);
var newJSON = Object.assign(response.responseJSON, scraping);
console.log(newJSON)
$.ajax({
url:"https://api.myjson.com/bins/1e0ybo",
type:"PUT",
data:JSON.stringify(newJSON),
contentType:"application/json; charset=utf-8",
dataType:"json",
success: function(data, textStatus, jqXHR){
console.log("%cSuccess: Uploading Data", 'background-color: #8cc2e6; color: #000')
}
});
}
});
}
});
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
В строках 72, 73 и 75 я поставил console.log()
, чтобы проверить, что все переменные имеют значения, которые они должны иметь, за исключением того, что это не так (как Вы можете видеть на скриншоте консоли ниже).
Я не понимаю, почему мое значение response.responseJSON
(я тоже пробовал с данными, но оно дало мне то же самое) и моя переменная очистки равны, они не должны не быть. Я проверил, что в моем файле, где я получаю данные, нет этих значений, но нет ...
Кто-нибудь знает, как это исправить?
Скриншот