微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法从网页获取所有“ div”元素

如何解决无法从网页获取所有“ div”元素

我正在尝试编写chrome扩展名(暂时),该扩展名更改具有特定“类名”的元素的背景色。 此代码内容脚本)不起作用:

let divs = document.getElementsByClassName('arbitrary-class-name');

for (let el of divs) {
    el.style['background-color'] = 'FFF298';
}

当我尝试执行时,出现“ Uncaught TypeError:divs不可迭代”。 我还尝试检查源代码,并且发现要加载的所有元素都是在加载过程中动态创建的,也许我的代码正在尝试访问尚不存在的元素?

编辑:this是我要使用的页面,例如,我想更改所有“ partecipante-info” div的背景颜色。

edit2:此代码始终在我的脚本之后运行:

XHR finished loading: POST "https://some-link".
send @ jquery-1.12.4.js:10254
ajax @ jquery-1.12.4.js:9738
(anonymous) @ genera_tabellone_v2.js:15
fire @ jquery-1.12.4.js:3232
fireWith @ jquery-1.12.4.js:3362
ready @ jquery-1.12.4.js:3582
completed @ jquery-1.12.4.js:3617

解决方法

简介

如果元素是动态生成的,则需要在元素生成后运行代码。

您可以使用几种方法,但我有2条建议:

  1. 您可以在页面加载后尝试运行一次代码。看看@以下链接。如果要检测镶边选项卡事件,可以使用以下命令:Chrome Extension: Make it run every page load。否则,您也可以尝试侦听人体负荷,但我不知道这样是否可行。

  2. 另一个选择是使用SetInterval并在特定时间搜索特定元素。将其放在chrome.tabs.onUpdated内,每隔1秒钟检查一次。.当发现具有特定类的元素时,请禁用setInterval。

可能的例子

   chrome.tabs.onUpdated.addListener( function (tabId,changeInfo,tab) {
      if (changeInfo.status == 'complete') {
    
            // do your things
        
        let divs = document.getElementsByClassName('arbitrary-class-name');

        //Check if iterable         
        if(divs == null || typeof divs[Symbol.iterator] !== 'function'){
             return;
        }

        if(di)
        for (elt of divs) {
            elt.style['background-color'] = 'FFF298';
        }
    
    
      }
    })

参考文献

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。