Javascript 监听开发人员工具中的样式更改
Javascript listen for style changes made in developer-tools
有没有办法检测仅在开发人员工具(检查元素)中所做的样式更改?
如果用户以管理员身份登录,我想允许保存它们。
您可以在 JavaScript 中使用 element.style
访问 HTMLElement 的样式。因此,您可以在页面加载时保存样式,在用户启动保存和比较时再次检查它们——不同之处在于用户更改。
至于在它们发生时立即检测它们,您可以使用 MutationObserver
来获得页面属性更改的通知。这适用于向 Devtools 中的特定元素添加样式,但不适用于编辑现有样式和(我认为)向现有选择器添加样式。我不确定这些更改时是否有办法获取事件。
编辑:实际上,似乎检查 element.style
与使用 MutationObserver
具有相同的限制:仅为特定元素添加的样式(即显示为内联样式的样式DOM) 出现。可能有一种方法可以实际访问所有样式,但我不知道。
您可以使用 MutationObserver
在 DOM 元素被修改时收到通知。请参阅下面的代码片段以查看它是否正常工作。
请注意,它不会告诉您突变是由您页面上的 Javascript 触发的,还是通过开发者工具触发的。因此,当您的 JS 更改某些内容以及用户更改某些内容时,您会有额外的跟踪负担。
var target = document.getElementById('targetDiv');
var observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
console.log("New Mutation:");
mutation.addedNodes.forEach(function(node) {
console.log("Added: " + node.nodeName);
});
mutation.removedNodes.forEach(function(node) {
console.log("Removed: " + node.nodeName);
});
});
});
var config = {
attributes: true,
childList: true,
characterData: true
};
observer.observe(target, config);
function mutate() {
target.innerHTML += Math.random() + "<br/>"
}
#targetDiv {
margin: 10px;
width: 500px;
padding: 5px;
}
<div id="targetDiv"></div>
<button id="mutate" onclick="mutate()">Mutate the Div</button>
有没有办法检测仅在开发人员工具(检查元素)中所做的样式更改?
如果用户以管理员身份登录,我想允许保存它们。
您可以在 JavaScript 中使用 element.style
访问 HTMLElement 的样式。因此,您可以在页面加载时保存样式,在用户启动保存和比较时再次检查它们——不同之处在于用户更改。
至于在它们发生时立即检测它们,您可以使用 MutationObserver
来获得页面属性更改的通知。这适用于向 Devtools 中的特定元素添加样式,但不适用于编辑现有样式和(我认为)向现有选择器添加样式。我不确定这些更改时是否有办法获取事件。
编辑:实际上,似乎检查 element.style
与使用 MutationObserver
具有相同的限制:仅为特定元素添加的样式(即显示为内联样式的样式DOM) 出现。可能有一种方法可以实际访问所有样式,但我不知道。
您可以使用 MutationObserver
在 DOM 元素被修改时收到通知。请参阅下面的代码片段以查看它是否正常工作。
请注意,它不会告诉您突变是由您页面上的 Javascript 触发的,还是通过开发者工具触发的。因此,当您的 JS 更改某些内容以及用户更改某些内容时,您会有额外的跟踪负担。
var target = document.getElementById('targetDiv');
var observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
console.log("New Mutation:");
mutation.addedNodes.forEach(function(node) {
console.log("Added: " + node.nodeName);
});
mutation.removedNodes.forEach(function(node) {
console.log("Removed: " + node.nodeName);
});
});
});
var config = {
attributes: true,
childList: true,
characterData: true
};
observer.observe(target, config);
function mutate() {
target.innerHTML += Math.random() + "<br/>"
}
#targetDiv {
margin: 10px;
width: 500px;
padding: 5px;
}
<div id="targetDiv"></div>
<button id="mutate" onclick="mutate()">Mutate the Div</button>