0
例如,我想在.my-codes
中編寫一些代碼。如何在觀察MutationObserver的回調中「暫停」
<head>
<script class="my-codes">
var ob = new MutationObserver(
function (mutations) {
mutations.forEach(
mutation => {
mutation.addedNodes.forEach(
node => {
if(node.nodeName === "DIV"){
// Without this browser may crush for infinite recursion
this.disconnect();
let innerNode = document.createElement("div");
innerNode.className = "inner-div";
console.log("Insert div to a ." + node.className);
node.appendChild(innerNode);
// Method below does not exist
/* this.reconnect(); */
}
}
)
}
);
}
);
ob.observe(document, {childList:true, subtree:true});
</script>
</head>
<body>
<div class="div1">
<script>
let asyncDiv = document.createElement("div");
asyncDiv.className = "div3";
setTimeout(()=>document.body.appendChild(asyncDiv), 10);
</script>
</div>
<div class="div2"></div>
</body>
預期結果(如果像this.reconnect();
存在):
<div class="div1">
<div class="inner-div"></div>
</div>
<div class="div2">
<div class="inner-div"></div>
</div>
<div class="div3">
<div class="inner-div"></div>
</div>
實際結果(觀察第一個插入後完全停止):
<div class="div1">
<div class="inner-div"></div>
</div>
<div class="div2"></div>
<div class="div3"></div>
有沒有一種可靠的方法執行this.reconnect();
函數?
(這將是最好不要亂用全局變量,代碼如下不被認爲是可靠的方法,因爲回調函數需要捕獲全局變量)
var target = document;
var config = {childList:true, subtree:true};
var ob = new MutationObserver(
function(mut, observer){
this.disconnect();
/* mess with DOM */
observer.observe(target, config);
}
)
ob.observe(target, config);
其實我m是試圖「重新連接」的那個,我使用'https:// greasyfork.org/scripts/12228/code/setMutationHandler.js'中的'setMutationHandler'。我沒有找到訪問原始目標和配置的方法。是否可以在不修改原始'setMutationHandler.js'的情況下重新連接? – Byzod