javascript - 如何在没有jquery的情况下创建元素后执行javascript代码?

标签 javascript html google-chrome-extension

我正在开发一个 Chrome 扩展,它可以修改网站中的元素。该网站在加载主文档后发送大量ajax调用以获取页面内容(GWT框架架构)。我需要修改该网页的内容,并且只有在所有 ajax 调用之后才会创建我要修改的元素。

假设我要修改的元素id是#idContainer > div > div.container.container\--wider.\\30,完成后才可用ajax 调用。

那么如何在该元素可用后执行 js 代码(通过 chrome 扩展 -> 内容脚本)。

注意: 我在 stackOverflow 中看到了很多类似的问题,但如果不使用 jQuery,没有一个问题能得到答案。

最佳答案

考虑使用Mutation Observer 。这是我的一些项目的示例,我必须解决完全相同的问题。

// observer callback
const callback = (mutations) => {
  const matching = [];
  for (const {addedNodes} of mutations) { // for each mutation
    for (const node of addedNodes) { // iterate through all added nodes
      if (node.nodeType !== Node.ELEMENT_NODE) {
        continue; // only react to real element nodes
      }
      if (node.children[0]) { // Here you can check for what you want
        matching.push(...node.getElementsByTagName('pre'));
      }
    }
  }
  if (matching.length === 2) { // I needed the second pre tag
    ipcRenderer.send('note-result', matching[1].innerText);
  }
};

// intialize the observer with the callback
const observer = new MutationObserver(callback);
// pass a targetNode and an options object in the observe method
observer.observe(document.body, {attributes: true, childList: true, subtree: true}); 

在此示例中,我对 DOM 中出现的第二个“pre”标签的 textContent 感兴趣。

您还可以使用disconnect方法停止观察:

observer.disconnect();

您必须根据您的特定用例稍微调整代码,但这就是使用突变观察器的要点。

关于javascript - 如何在没有jquery的情况下创建元素后执行javascript代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58708556/

相关文章:

javascript - AcceptDanger 和 open 在 chrome 扩展中不起作用

javascript - 从对象中获取所需的值

html - 图片前的文字

google-chrome - Chrome 扩展 : how to use serial port (now that apps are sunsetting)?

javascript - 如何在移动浏览器中禁用内容选择

jquery - CSS:Div 出现在另一个 Div 下方

javascript - chrome.webstore.install 调用两个回调?为什么?

javascript - 从 Javascript 更新数据库属性

javascript - Angular2-all.umd.js 和 angular2.js 有什么区别

javascript - 用不同的形状填充div,没有间隙