javascript - 我无法在函数调用中使用之前通过 AJAX 请求加载的对象

标签 javascript json google-chrome-extension

我正在尝试编写一个 Chrome 扩展,它会在加载时关闭选项卡并包含特定关键字,我将其存储在 banned.json 中。但以下代码给了我一个错误:

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


    chrome.webNavigation.onCompleted.addListener(closeTab, obj.banned); // error is here

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

它说它无法读取未定义的禁止属性。怎么可能? obj 在第一行中定义,我可以在 if-block 中引用它。谁能帮我吗?

编辑:
banned.json:

{
    "banned": [
        "https://www.google.de/",
        "youtube.com"
    ]
}

最佳答案

您需要将“chrome.webNavigation.onCompleted.addListener”语句放入“xhttp.onreadystatechange”函数中。

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

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

编辑

您可以尝试按如下方式更改banned.json。

{
    "banned": 
        "url" : [
            {"hostContains":"https://www.google.de/"},
            {"hostContains":"youtube.com"}
        ]
}

关于javascript - 我无法在函数调用中使用之前通过 AJAX 请求加载的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59251858/

相关文章:

javascript - 在 FormData 中发送整数

json - 从 PostgreSQL 到 node.js 从多对多连接表返回嵌套的 JSON

json - 对象验证 list

javascript - 如何在 Angular js(或)JQuery 中更新 Cookie 值

javascript - Google 脚本将文件大小驱动到电子表格 - 文件迭代器不起作用

javascript - 如何调整 SVG 动画的大小?

mysql - mysql中如何组织Json存储多对多关系

google-chrome-extension - chrome.identity.launchWebAuthFlow注销/切换用户

javascript - getElementsByClassName 在 chrome 扩展内容脚本中表现异常

javascript - "new"谷歌日历中的 MutationObserver