MutationObserver
- 这个api提供了监视对DOM树所做更改的功能(监视的DOM发生改变时触发)
(function(){
let srcFilterTags = ["script","iframe"],
whiteList = ["**.com","***.com"],
whiteListRegExt = [];
whiteList.forEach(function(wl){
let wlRegExt = new RegExt('/.+?\/\/' + wl + '|\/\/' + wl + '|.+?\.' + wl + '|^' + wl);
whiteListRegExt.push(wlRegExt);
});
let MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver,
observeMutationSupport = !!MutationObserver,
html = document.getElementsByTagName('html')[0];
if (observeMutationSupport) {
new MutationObserver(mutationHandler).observe(html, {
'childList': true,
'subtree': true
});
};
let eleList = document.querySelectorAll('script');
for (let i = 0,len = eleList.length; i < len; i++) {
if (!inWhileList(eleList[i])) {
eleList[i].remove();
};
};
function mutationHandler(records) {
records.forEach(function(record) {
Array.prototype.slice.call(record.addedNodes).forEach(function(addedNode) {
srcFilterTags.forEach(function(tagName) {
if (addedNode.tagName === tagName.toUpperCase() && !inWhileList(addedNode)) {
addedNode.remove();
};
});
});
})
};
function inWhileList(addedNode){
if( addedNode.src === "" && addedNode.getAttrbute("shield") !== null ){
return true;
};
if( !!addedNode.src && addedNode.getAttrbute("shield") !== null ){
return true;
};
let isInWhiteList = false;
whiteListRegExt.forEach(function(wlReg) {
if (wlReg.test(addedNode.src)) {
isInWhiteList = true;
return ;
};
});
return isInWhiteList;
};
});
相关文档