Chrome 扩展:等待元素加载(异步 js)

2024-01-09

我有一个 Chrome 扩展程序,我想等到元素加载后再将内容注入页面。

我正在尝试注入一个按钮:

myButton = document.createElement('button');
myButton.class = 'mybutton';
document.querySelector('.element_id').appendChild(myButton)

我将其放在内容脚本的顶部。它曾经工作得很好,但后来就停止工作了。显示的错误是:

Uncaught TypeError: Cannot read property 'appendChild' of null

为了等待具有class id的元素.element_id为了加载,我尝试使用 MutationObserver

var observer = new MutationObserver(function(mutations) {
    mutations.forEach(function(mutation) {
        if (!mutation.addedNodes) return

        for (var i = 0; i < mutation.addedNodes.length; i++) {
            if (mutation.addedNodes[i].parentNode == document.querySelector('#outer-container')) {

                myButton = document.createElement('button');
                myButton.class = 'mybutton';
                document.querySelector('.element_id').appendChild(myButton)
        }
            var node = mutation.addedNodes[i]
        }
    })
})

observer.observe(document.body, {
    childList: true
    , subtree: true
    , attributes: false
    , characterData: false
})

当我使用变异观察器时,页面将加载一个名为的外部 div 元素outer-container,而且我没有办法直接比较班级.element_id。班上.element_id外部 div 嵌套了很多层。

但是,上述方法不起作用,我仍然收到 null 属性错误。

在注入之前是否有更好的方法来等待加载某些元素(异步加载)?


不要忘记添加childList https://developer.mozilla.org/en/docs/Web/API/MutationObserver and subtree https://developer.mozilla.org/en/docs/Web/API/MutationObserver观察变化时的属性。

var observer = new MutationObserver(function (mutations) {
    mutations.forEach(function (mutation) {
        if (!mutation.addedNodes) {
            return;
        }
        for (var i = 0; i < mutation.addedNodes.length; i++) {
            if (mutation.addedNodes[i].classList.contains("element_id")) {
                // Your logic here
            }
        }
    });
});

observer.observe(document.body, {
    childList: true,
    subtree: true
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Chrome 扩展:等待元素加载(异步 js) 的相关文章

  • 使用 javascript 将 CSS 类添加到具有另一个类名的所有元素

    我正在尝试使用 javascript 将类添加到具有不同类的所有元素 我知道你可能认为这是多余的 但对于我所处的情况来说这是必要的 我需要一种方法来查看具有该类名称的所有元素并添加该类 但我不明白如何获取计数 我正在使用一个 cms 但我无
  • goJS 下拉菜单删除项目

    我有简单的 python Flask goJS 图形应用程序 如下所示 节点和链接文本的源是从应用程序的后端加载的 我将它们设置为model modelData像这样的部分 var graphDataString JSON parse di
  • getScript 本地加载而不是全局加载?

    根据我的阅读 JQuery 的 getScript 函数使用名为 global eval 的函数在全局上下文中加载脚本文件 是否有特定的设置或方法可以更改此设置 以便它将改为在我调用它的函数中加载 如果我执行以下代码名称 则返回未定义 因为
  • ~~(“双波浪线”)在 Javascript 中做什么?

    我今天在查看一个在线游戏物理库时遇到了 运算符 我知道单个 是按位 NOT 这会使 成为 NOT 的 NOT 这会返回相同的值 不是吗 它会删除小数点后的所有内容 因为按位运算符会隐式地将其操作数转换为带符号的 32 位整数 无论操作数是
  • Javascript JSON stringify 没有要包含在数据中的数字索引

    我正在尝试通过 JSON 传递非数字索引值 但没有获取数据 var ConditionArray new Array ConditionArray 0 1 ConditionArray 1 2 ConditionArray 2 3 Cond
  • 输入类型货币格式,带逗号和小数位 2

    我只是想问如何制作输入类型文本的货币格式的JavaScript 当您输入数字时 数字是否可能带有逗号 另外 如何使数字固定为 2 个小数 如果我输入 3 位小数 最后一个数字将四舍五入 因此可以是 2 位小数 我有一个仅接受数字的文本框 我
  • Node.js 应用程序中的系统托盘图标

    这是我的 node js 应用程序中需要的 系统托盘图标 在应用程序工作期间更改此图标 单击图标后的菜单 创建带有登录 密码字段和确认按钮的窗口 这是我发现的 https github com appjs appjs https githu
  • ReactJS 中的组件之一出现“必须返回有效的 React 元素(或 null)”错误

    我的代码是这样的 var data id 1 taskName Pete Hunt standarDescription This is one comment emplComment meaaow I am meeawo empRatin
  • .map() Javascript ES6 地图?

    你会怎么做 本能地 我想做 var myMap new Map thing1 1 thing2 2 thing3 3 wishful ignorant thinking var newMap myMap map key value gt v
  • jqGrid如何将额外的类应用于标题列

    我想在特定列上应用一个额外的类 我知道通过在 colModel 中指定这一点对于行是可能的 但这些类仅应用于 结果行 中的列 而不应用于标题 我想要达到的是通过简单的类名隐藏较小视口的特定列 与 Twitter Bootstrap 一起使用
  • Firestore onSnapshot() 方法多次触发

    我有一个带有多个路由和 vuex 的 vue cli 4 应用程序 Firestore 数据库已成功连接 我的应用程序立即反映从 Firestore 控制台应用于数据库的修改 在离开包含与 Firestore 同步 的组件的路线然后返回后
  • 在 Javascript 中按日期对数组进行排序

    我在用着sort 按日期排序数组 elements data sort function a b return a date getTime b date getTime 问题是某些元素缺少日期 或日期无效 这导致了这个错误 无法读取属性
  • 窗口对象没有创建它的页面附加的属性

    我用window open url target 开一个url在新选项卡 窗口中 在此之前 我在新打开的窗口对象上设置了一些属性 目的是将数据从该页面 新窗口的创建者 传递到新创建的窗口 在除 Internet Explorer 之外的所有
  • 大型 AngularJS 应用程序设计

    我需要关于设计具有多个复杂模块的 AngularJS 应用程序的建议 并根据用户角色在身份验证和授权后加载模块 有些用户可以访问一个简单的模块 有些用户可以访问仪表板 有些用户可以访问 2 个以上的模块 我们已经确定了许多可以在不同模块中重
  • 如何配置 StrongLoop LoopBack MongoDB 数据源以部署到 Heroku

    我正在使用 LoopBack 版本 1 6 并使用以下数据源配置运行本地 mongoDB 服务器进行开发 mongodb defaultForType mongodb connector loopback connector mongodb
  • 跨浏览器兼容音频有哪些选项?

    我正在使用这个功能 function playSound file MyAudio new Audio file MyAudio play 不幸的是 我正在努力寻找一种适用于所有浏览器的文件类型 Mp3 适用于 Chrome Safari
  • 有没有办法防止 neDB 集合数组中的条目重复?

    var addNewUser function id chatId db update id id push users chatId function err numAffected code after the record is up
  • 如何获取元素相对于当前屏幕位置的偏移量?

    我正在尝试用纯 Javascript 重构所有 jQuery 除了非常具体的值之外 一切都正常工作 根据此代码的浏览器供应商 我得到了不同的值 对于 jQuery 我会使用 var topSelected figure offset top
  • RegisterClientScriptCode 在部分回发后不起作用

    以下代码行位于 SharePoint 网站的用户控件中 ScriptManager RegisterClientScriptBlock this this GetType jquery144 false ScriptManager Regi
  • jQuery() 与 jQuery.parseHtml() 空格语法错误

    我有一行 javascript 导致 jQuery 中出现语法错误 document find Container replaceWith data find Content 代码本身如果相当无害的话 它所做的只是从 ajax 调用获取响应

随机推荐

  • Android jetpack 编写没有 xml 的片段

    晚安 我使用drawerContent和navigationIcon来创建菜单 但是我可以创建一个没有xml的Fragment 吗 在撰写喷气背包中 如果有人有任何参考资料 我将不胜感激 使用 Compose 您可以尝试不同的东西 您可以使
  • 使用 AppFabric 缓存在 MVC SessionState 中使用 WCF DataContract

    我有一个数据访问层 一个服务层和一个表示层 表示层是 ASP NET MVC2 RTM Web 服务层是 WCF 服务 都是 NET 3 5 SP1 问题是在服务中 返回的对象被标记为 DataContract 属性 Web 使用 AppF
  • 如何使用OpenGL和QT?

    我正在开发一个小项目 我需要使用 OpenGL QT 我在这两个方面都是新手 所以我需要一个很好的教程来说明如何彼此合作而不是单独合作 在 QT Creator 上运行 OpenGL 还是使用 QT Visual Studio Plug i
  • ScrollView 重叠工具栏

    我尝试使用 ScrollView 和 Toolbar 作为 LinearLayout 的唯一子级 但它们彼此重叠 搜索了一下 但没有找到任何有用的东西 知道如 何解决这个问题而不是给 ScrollView 提供填充 边距吗
  • 如何阻止读取 C++ stringstream 以等待数据

    因此 我一直试图弄清楚如何等待来自 C stringstream 的数据 例如 而不需要不断检查数据是否存在 这非常消耗 CPU 例如 我完全能够从串行设备读取数据 并在没有数据到达时锁定进程 但不幸的是我无法弄清楚如何使用 C 流来做到这
  • 两个数组到哈希组合中奇怪的乘法运算符行为

    我正在寻找一种将两个数组转换为单个散列的方法 我发现了这样的东西 a1 1 2 3 a2 A B C Hash a1 zip a2 flatten 我觉得这个语法有点奇怪 因为Hash a1 zip a2 会做完全相同的事情 但更重要的是
  • Nodejs PM2集群模式实现负载均衡

    使用 pm2 集群时 会出现一个非常严重的警告 提示您不应在生产中使用它 也不应用于负载平衡 请改用 nginx 不幸的是 这正是我计划使用 PM2 的方式 它真的不打算用于此目的还是只是还没有完全准备好 Nodejs集群 0 10 有很多
  • Emacs shell 模式 SSH 会话中的 Tab 补全

    我当前的 emacs 使用模式导致我打开了多个 shell 模式缓冲区 每个缓冲区都运行一个 ssh 会话 不过 我遇到了一个问题 当我尝试在远程会话中使用制表符补全文件名和其他内容时 shell 尝试使用本地计算机上可用的补全 而不是远程
  • R:将日期从字符转换为日期时间[重复]

    这个问题在这里已经有答案了 I have df date作为下面的字符类型 date 1 2016 04 10T12 21 25 4278624 2 2016 04 12T10 01 42 9573987 3 2016 04 12T10 0
  • 有没有办法在运行时停止/重新启动 ejb 3.1 自动计时器?

    我正在尝试使用一个简单的自动 EJB 计划 计时器 我的代码是这样的 Singleton Lock LockType READ public class Scheduler Schedule second 0 minute 20 hour
  • 如何使用javascript更改标签的值?

    这是我的html代码 a href myfile html Old File gt 我想更改名称为 新文件 的标签的值 所以我写了像 document getElementById tagId value New File 这样的javas
  • wav <> mp3 for flash(as3)

    我想知道 MP3 解码 编码 我希望使用 AS3 在 Flash 中实现这一点 我确信这将是一个正确的痛苦 我不知道从哪里开始 有人可以提供任何指示吗 参考资料 很久以后 非常感谢大家的意见 看来我还有很长的路要走 理论上 您也可以将其作为
  • 使用 OpenGL 和 QT 进行纹理映射 - C++

    我在使用 OpenGL 和 Qt 将纹理映射到四边形时遇到问题 我查看了其他几个 SO 线程 但是许多函数调用的使用方式必须略有不同才能进行编译 Qt Verison 4 8 6 这是我的相关代码 现在所发生的只是一个窗口显示为黑色背景 但
  • 如何保存openFileDialog中的最后一个文件夹?

    如何使我的应用程序存储最后打开的路径openFileDialog新开后恢复吗 OpenFileDialog openFileDialog1 new OpenFileDialog openFileDialog1 Filter txt file
  • 如何在 Ubuntu Desktop 12.04 上设置 ANT_HOME?

    看起来Ubuntu使用的是 bashrc bash profile pam profile etc environment and etc profile以非常相似的方式 我希望能够向其中之一添加配置 无论哪一个是合适的 来设置ANT HO
  • 如何从内容页访问 TextArea 值

    我的内容页面中有一个 TextArea 控件 位于 UpdatePanel 内
  • 如何让 Xcode 将自定义文件扩展名识别为 Objective-C 以进行语法突出显示?

    我想让 Xcode 4 将自定义文件扩展名 例如 lx 识别为 Objective C 以实现语法突出显示和缩进目的 如何让工具自动执行此操作 Xcode 根据文件的属性确定如何在其用户界面中表示文件统一类型标识符 https develo
  • Angular Material 日期选择器 |延迟加载 + CustomDateAdapter + 国际化 - RangeError:超出最大调用堆栈大小

    结构问题 我不太确定是否找到了这两行代码的正确位置 providers provide MAT DATE LOCALE useValue de DE provide DateAdapter useClass CustomDateAdapte
  • 使用 blazor 加载外部 .NET Standard 2.0 程序集

    在 Blazor 应用程序中 我想加载外部程序集并执行方法 为此 我使用 Blazor 模板创建了一个新的 ASP Net Core Web 应用程序 然后 在 Razor 页面 将由浏览器 wasm 编译和执行 中 我使用反射来加载程序集
  • Chrome 扩展:等待元素加载(异步 js)

    我有一个 Chrome 扩展程序 我想等到元素加载后再将内容注入页面 我正在尝试注入一个按钮 myButton document createElement button myButton class mybutton document q