我想撰寫腳本,當它出現在頁面上時,將一個元素添加到具有特定 id 的另一個元素。當用戶將滑鼠懸停在其他元素上時,它會添加到檔案中。
在業務邏輯方面:當用戶將滑鼠懸停在用戶名上時,會出現一個彈出框。我想在每個出現的彈出視窗中為孩子添加一個按鈕。
我看過這個,并用下面的代碼類似于這個結構,它可以作業。問題是它只檢查一個元素,當它出現時,結束它的作業。我了解,為了檢查每個元素,我應該洗掉 line this.disconnect();。但是,這只會導致網頁掛起。
我應該怎么做才能讓它作業?難道我做錯了什么?
// ==UserScript==
// @name ms_teams_integration
// @match https://example.com/*
// @version 1.0
// @grant none
// @run-at document-start
// @require https://greasyfork.org/scripts/12228/code/setMutationHandler.js
// ==/UserScript==
var teamsIcon = ""; // icon in svg format here
setMutationHandler(document, '#user-hover-email', function(nodes) {
this.disconnect();
nodes.forEach(function(n) {
var emailLink = n.getElementsByTagName("a").item(0);
var teamsLink = emailLink.cloneNode(true);
teamsLink.setAttribute(
"href",
teamsLink.getAttribute("href")
.replace("mailto:", "https://teams.microsoft.com/l/chat/0/0?users="));
teamsLink.setAttribute("target", "_blank");
teamsLink.innerHTML = teamsIcon;
n.appendChild(teamsLink);
});
});
uj5u.com熱心網友回復:
它掛起是因為您的代碼導致了一個新的突變,該突變被一次又一次地檢測到。為了防止它,檢查是否已經添加了新元素:
nodes.forEach(function(n) {
if (n.__ms_teams_integration) return;
var emailLink = n.getElementsByTagName("a").item(0);
// ...............
// ...............
n.appendChild(teamsLink);
n.__ms_teams_integration = true;
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/493188.html
標籤:javascript html dom 油猴 篡改猴子
上一篇:如何在DOM中取消注釋行內腳本
