javascript - 在控制台中有效,但在内容脚本中无效

标签 javascript html google-chrome-extension undefined

这是我的第一篇文章,因为我的 Chrome 扩展程序有问题。 我需要使用内容脚本向页面添加一些按钮和内容。但是我的代码:

function ModifyInsta() {
  var root = {
    img: document.getElementsByClassName("FFVAD"),
    btn: document.getElementsByClassName("ltpMr Slqrh")
  };
  for (var i = 0; i < root.btn.length; i++) {
    if (typeof root.btn[i].getElementsByClassName("btnInsta")[i] === 'undefined') {
      chrome.storage.sync.get("OPTION", function(data) {
        var img = document.createElement("img");
        var space = document.createElement("a");
        var txt1 = document.createTextNode("Download");
        var txt2 = document.createTextNode("");

        space.appendChild(txt2);
        root.btn[i].appendChild(space);

        img.appendChild(txt1);
        root.btn[i].appendChild(img);

        space.innerHTML = "&emsp;&ensp;";
        space.setAttribute('style', "cursor: default; user-select: none")

        if (data.OPTION == "download")
          img.setAttribute('src', chrome.extension.getURL('download.png'));
        else
          img.setAttribute('src', chrome.extension.getURL('view.png'));
        img.setAttribute('href', "#");
        img.setAttribute('role', "button");
        img.setAttribute('class', "btnInsta");
        img.setAttribute('style', "cursor: pointer; user-select: none");
      });
    }
  }
}

在某些页面的控制台中运行良好,但在内容脚本中运行不佳。它说undefinedroot.btn[i].appendChild(space); (“响应 storage.get 时出错:TypeError:无法读取未定义的属性‘appendChild’”)……我真的不知道出了什么问题。每次当我需要帮助时,我都会用谷歌搜索。但我认为这个问题不可能用谷歌搜索。

请帮帮我。我什么都试过了

编辑:

一段 HTML:

<section class="ltpMr Slqrh"><a class="fr66n tiVCN" href="#" role="button"><span class="Szr5J coreSpriteHeartOpen ">Páči sa mi to</span></a><a class="_15y0l OV9Wd" href="#" role="button"><span class="Szr5J coreSpriteComment">Komentovať</span></a><a class="wmtNn fscHb " href="#" role="button" aria-disabled="false"><span class="Szr5J coreSpriteSaveOpen ">Uložiť</span></a></section>

最佳答案

function ModifyInsta() {
var root = {
    img: document.getElementsByClassName("FFVAD"),
    btn: document.getElementsByClassName("ltpMr Slqrh")
};
for(let i = 0; i < root.btn.length; i++) {
    if (typeof root.btn[i].getElementsByClassName("btnInsta")[i] === 'undefined') {
        chrome.storage.sync.get("OPTION", function(data){
            var img = document.createElement("img");
            var space = document.createElement("a");
            var txt1 = document.createTextNode("Download");
            var txt2 = document.createTextNode("");

            space.appendChild(txt2);
            root.btn[i].appendChild(space);

            img.appendChild(txt1);
            root.btn[i].appendChild(img);

            space.innerHTML = "&emsp;&ensp;";
            space.setAttribute('style', "cursor: default; user-select: none")

            if (data.OPTION == "download")
                img.setAttribute('src', chrome.extension.getURL('download.png'));
            else
                img.setAttribute('src', chrome.extension.getURL('view.png'));
            img.setAttribute('href', "#");
            img.setAttribute('role', "button");
            img.setAttribute('class', "btnInsta");
            img.setAttribute('style', "cursor: pointer; user-select: none");
        });
    }
}

@Keith 非常感谢

关于javascript - 在控制台中有效,但在内容脚本中无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51043545/

相关文章:

javascript - 在需要时内联加载 jQuery/CSS 还是始终通过外部加载?

javascript - jquery append() 与 css 显示 :inline-block 的奇怪交互

iphone - 网页可以向左拖动并在移动 View 中放大/缩小

javascript - 在php中递增和递减 "date"变量

javascript - 在 ngRoute 中使用嵌套 Controller - AngularJS

javascript - 如何获取 popup.js 文件中选项卡的当前 url?

http - 如何通过 chrome 扩展过滤 http 请求

google-chrome-extension - chrome.runtime.onMessage 多次调用

javascript - 为 Dart 二进制 websocket 从 ByteBuffer 读取/写入固定大小的 int 和字符串

javascript - 自定义图像作为单选按钮