Поведение кода изменяется при замене внутреннего. JSON на AJAX запрос - PullRequest
0 голосов
/ 11 января 2020

Я заменил свой внутренний. JSON на запрос AJAX, и теперь мой код перестал работать правильно. Моя цель - написать расширение chrome, которое закрывает вкладку, если его ссылка содержит определенные ключевые слова, сохраненные в файле. JSON. Вот то, что код выглядел раньше:

chrome.webNavigation.onCompleted.addListener(closeTab, {
  url: [
    {urlPrefix: 'https://www.google.de/'},
    {urlPrefix: 'https://sghm.eu/iserv/login'},
  ]
});

function closeTab(e) {
  if (!e.frameId) {
    chrome.tabs.remove(e.tabId);
  }
}

Этот код работал для меня.
Теперь новый:

var obj = {};
    var xhttp = new XMLHttpRequest();
    xhttp.onreadystatechange = function(){
    if(xhttp.readyState == 4 && xhttp.status == 200){
        obj = JSON.parse(xhttp.response);
        console.log(obj);
    }};
    xhttp.open('GET', "banned.json", true);
    xhttp.send();


    chrome.webNavigation.onCompleted.addListener(closeTab, obj);

    function closeTab(e) {
      if (!e.frameId) {
        console.log("Hallo2");
        chrome.tabs.remove(e.tabId);
      }
    }

И забанен. json file:

[
    "www.google.de",
    "www.youtube.com/?gl=DE"
]

Этот код теперь закрывает все вкладки независимо от ссылки или чего-либо еще. Но я не знаю почему. AJAX работает, когда консоль успешно отображает массив JSON, который был ранее загружен.

1 Ответ

1 голос
/ 11 января 2020

Вы уверены, что obj еще не пусто, когда вы нажмете эту строку?:

chrome.webNavigation.onCompleted.addListener(closeTab, obj);

Вы можете достичь этого до того, как xhttp.readyState == 4 && xhttp.status == 200 оценивается как true (потому что onreadystatechange функция обратного вызова выполняется асинхронно).

Вы пытались переместить указанную выше строку чуть ниже console.log(obj); в своей функции обратного вызова onreadystatechange?

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