invisible-watermark
Version:
watermark auto injector
44 lines (43 loc) • 1.7 kB
JavaScript
var MutationObserver = window.MutationObserver ||
window.WebKitMutationObserver ||
window.MozMutationObserver;
var supportMutationObserver = !!MutationObserver;
var watermarkDefaultConfig = {
attributes: true,
attributeOldValue: true,
childList: true,
};
function watermarkCallback(mutationList, observer) {
mutationList.forEach(function (mutationRecord) {
var type = mutationRecord.type, attributeName = mutationRecord.attributeName, target = mutationRecord.target, oldValue = mutationRecord.oldValue, addedNodes = mutationRecord.addedNodes, removedNodes = mutationRecord.removedNodes;
if (type === 'attributes') {
observer.disconnect();
if (attributeName === 'style') {
target.style = oldValue;
}
else if (attributeName === 'id') {
target.id = oldValue;
}
observer.observe(target, watermarkDefaultConfig);
}
if (type === 'childList' && !addedNodes[0] && removedNodes[0]) {
//判断删除的节点s中是否有水印的dom,有的话重新插入
Array.prototype.forEach.call(removedNodes, function (item) {
if (item.id.match(/^wm_/)) {
observer.disconnect();
document.body.append(item);
observer.observe(target, watermarkDefaultConfig);
}
});
}
});
}
function initObserver($el, config) {
if (!$el)
return;
if (supportMutationObserver) {
var om = new MutationObserver(watermarkCallback);
om.observe($el, watermarkDefaultConfig);
}
}
export default initObserver;