javascript - Chrome 扩展 : How to modify elements created from an Ajax request in a webpage?

标签 javascript google-chrome google-chrome-extension

我正在尝试为这个页面做一个 chrome 扩展 http://jisho.org/kanji/radicals/我遇到了问题。

扩展应该修改在 #found_kanji div 中找到的包含“kanji”的元素,但是这些元素在页面加载时不存在,而是被创建的用户单击“部首”(汉字的一部分)后,会触发从网站数据库加载汉字的 Ajax 查询。

如何修改这些元素?

根据我的了解,DOM 操作事件现已弃用,因此我无法查看元素的创建时间。我可以尝试使用 webRequests API 将网站 javascript 替换为本地版本,我认为这会很丑陋但它可以工作,但后来我意识到我无法从网页脚本到内容脚本或扩展进行通信本身。有人有想法吗?

最佳答案

您可以使用 MutationObserver 来监听特定 div 中的 DOM 更改,并在新元素添加到 div 时执行您的修改:

var observer = new MutationObserver(function(mutations) {
  mutations.forEach(function(mutation) {
    if(mutation.addedNodes.length){
        var addedNodes = Array.prototype.slice.call(mutation.addedNodes);
        addedNodes.forEach(function(node){
            if(node.className == 'something'){
                // do stuff
            }
        });
    }
  });    
});

observer.observe(document.getElementById('found_kanji'), { subtree: true, childList: true, characterData: true });

jsFiddle demo

关于javascript - Chrome 扩展 : How to modify elements created from an Ajax request in a webpage?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22481498/

相关文章:

javascript - 参数缺失 && ||括号中的运算符但仍在工作

javascript - 如何将 Angular 2 App 部署到 Github Pages?

google-chrome - 与 Firefox 中 Chrome 的 native 客户端消息传递类似的技术?

android - 在 chrome (android) 上隐藏移动浏览器地址栏

javascript - 未捕获的类型错误 : Cannot read property '0' of null in Chrome extension

javascript - 用鼠标检测网页上的每个元素

javascript - 奇怪的 Javascript 字符串错误

javascript - 使用单个正则表达式验证主机名和 IP 地址

javascript - Chrome 扩展 : how to change origin in AJAX request header?

javascript - 使用 AJAX 加载代码时添加 rel ="noopener"