Das*_*uss 7 javascript twitter mutation-observers
有时,突变观察者回调不会在我期望的时候触发。
如果我在开发人员工具控制台中运行此代码:
// callback for mutations observer
callbackForAllChanges = function (mutationsList, observer) {
console.log("mutations: ", mutationsList);
};
// create mutation observer
allChanges = new MutationObserver(callbackForAllChanges);
// attach mutation observer to document
allChanges.observe(document, {
childList: true,
subtree:true
});
// create new child
document.body.appendChild(document.createElement("div"));
Run Code Online (Sandbox Code Playgroud)
我希望当我创建一个新的孩子时回调会触发。但有时会,有时不会。
当我在 stackoverflow 上的 devtools 控制台中运行代码时,它可以工作:我看到mutations: [MutationRecord]已记录到控制台。
当我在twitter上并在 devtools 控制台中运行上述代码时,它似乎不起作用:mutations: [MutationRecord]未记录到控制台。
什么可能导致 Mutation Observer 在 Twitter 上无法工作?
mutations: [MutationRecord]没有日志const newDiv = document.createElement('div')
newDiv.setAttribute('id','newDiv')
// callback for mutations observer
callbackForAllChanges = function (mutationsList, observer) {
console.log("mutations: ", mutationsList);
};
// create mutation observer
allChanges = new MutationObserver(callbackForAllChanges);
// attach mutation observer to document
allChanges.observe(newDiv, {
childList: true,
subtree:true
});
// create new child
newDiv.appendChild(document.createElement("div"));
Run Code Online (Sandbox Code Playgroud)
例子
const callbackForAllChanges = function (mutationsList, observer) {
if (mutationsList.find((record) => record.type === "childList")) {
document.body.appendChild(document.createElement("div"));
}
};
Run Code Online (Sandbox Code Playgroud)
我认为如果发生这种情况,可能会触发突变工作停止工作。
小智 1
我面临着同样的问题,现在我通过使用循环并检查是否手动进行了一些更改来修补回调。
setInterval(() => {
const recs = allChanges.takeRecords()
if (recs.length === ) return
yourcallback(recs)
}, 30)Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
772 次 |
| 最近记录: |