kxtool

@license End-User License Agreement

Dieses Skript sollte nicht direkt installiert werden. Es handelt sich hier um eine Bibliothek für andere Skripte, welche über folgenden Befehl in den Metadaten eines Skriptes eingebunden wird // @require https://update.greasyfork.org/scripts/469703/1296888/kxtool.js

function isMobile() {
let flag= false;
if ((navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i))) {
 flag= true;
}
return flag
}

 function aerads() { 
$('a, i, span').each(function() {
  var text = $(this).text().trim();  
  if (text == '广告') {
var thisparent=$(this).parent();
thisparent.remove();

  }
}); 

}

     function Passiveads() { 
     if (GM_info.script.namespace!="Z3JlYXN5Zm9yaw=="){ 
return
}
     	  aerads()
     	 $("iframe[src*='//googleads']").remove();
$("div[data-type='GoogleRender']").remove();
$(".adsbygoogle").remove();
$("#bottomads").remove();
$("script[src*='adsbygoogle.js']").remove();
$("script[src*='g.doubleclick.net']").remove();
$("script[src*='pos.baidu.com']").remove();
$("iframe[src^='https://g.163.com']").remove();
$("div[id*='google_ads']").remove();
$("div[data-google-query-id]").remove();
$("iframe[src*='pos.baidu.com']").remove();
$("iframe[src*='show-3.mediav.com']").remove();
$("div[class*='wwads-cn wwads']").remove();

    	var kgpingbiswhitezt=true;
 var kgpingbiswhiteurl = [
"recaptcha.google",
"captcha.qq.com",
"alicdn.com",
"aliyun.com",
"quark.cn",
"taobao.com",
"mall.com",
"weibo.com",
".le.com",
"iqiyi.com",
"tudou.com",
"qq.com",
"douyin.com",
"javascript:",
"youku.com",
"sohu.com",
"pptv.com",
"twitter.com",
"facebook.com",
"instagram.com",
"tiktok.com",
"imdb.com",
"vk.com",
"mtv.com",
"56.com",
"ku6.com",
"cntv.cn",
"cctv.cn",
"mgtv.com",
"yinyuetai.com",
"wasu.cn",
"163.com",
"1905.com",
"xunlei.com",
"funshion.com",
"youhui",
"pornhub.com",
"youtube.com",
"bilibili.com",
"mama.com",
"zhihu.com",
"baidu.com"];


var whiteHosts = [
  'suning.com',
  'vip.com',
  'jd.com',
  'taobao.com',
  'mall.com'
];


if (whiteHosts.some(function (host) {
  return location.hostname.indexOf(host) > -1;
})) {
  kgpingbiswhitezt = false;
}
var inputList = $("input").filter(":visible");

inputList.each(function() {
  var $this = $(this);
  var placeholder = $this.attr('placeholder') || '';
  if ($this.attr('name') === 'username' ||
      $this.is('[type="password"]') ||
      $this.attr('name') === 'password' ||
      $this.attr('type') === 'email' ||
      $this.attr('name') === 'email' ||
       $this.attr('type') === 'phone' ||
      $this.attr('name') === 'code' ||
      $this.attr('name') === 'phone' ||
      placeholder.indexOf('手机') !== -1 ||
      placeholder.indexOf('邮箱') !== -1 ||
      placeholder.indexOf('账号') !== -1 ||
      placeholder.indexOf('密码') !== -1 ||
      placeholder.indexOf('注册') !== -1) {
    kgpingbiswhitezt = false;
    return false;
  }
});
 //说明:此处是为了匹配某些网站登陆时插件错误屏蔽登陆验证的页面需要,防止不能正常登陆。并无没有收集用户的任何信息
 var classNames = ['data-down-ui', 'data-down-ui1', 'data-down-ui2'];
for (var i = 0; i < classNames.length; i++) {
    var className = classNames[i];
    if (document.getElementsByClassName(className).length > 0) {
      kgpingbiswhitezt = false;
        return;
    }
}
 
 if ( kgpingbiswhitezt){
 	  let iframehost=window.location.host;


 $("iframe").each(function(index){

 	var iframeon=0;

 	  	 if ($(this).attr("src")){
 	  	 	 let iframesrc=$(this).attr("src");
 	   for(let i = 0; i < kgpingbiswhiteurl.length; i++) {
      	  	   if (iframesrc.indexOf(kgpingbiswhiteurl[i])>=0){
      	  	   	   kgpingbiswhitezt=false;
      	  	   	   }
      }

 	  	   if ($(this).attr("src").indexOf("http")==0 && window.location.href.indexOf("tool")<0 && window.location.href.indexOf("video")<0  && $(this).attr("src").indexOf("video")<0 &&  $(this).attr("src").indexOf("?url=")<0 && $(this).attr("src").indexOf(iframehost)<0 && kgpingbiswhitezt){
 	  	   	     $(this).remove();
 	  	   	      iframeon=1;
 	  	  }
 	  	 	 }
 if ( iframeon==0){
	       try {
    var inputElements = $(this).contents();
    try {
      var inputLength = inputElements.find('input').length;
       var textareaLength = inputElements.find('textarea').length;
       var imgLength = inputElements.find('img').length;
       var videoLength = inputElements.find('video').length;
      var bodyText = inputElements.find('body').first().text();
      var bodyTextLength =bodyText.length;
 if (inputLength > 0 || textareaLength > 0   || imgLength==0 || videoLength>0  || bodyTextLength > 200) {
        kgpingbiswhitezt = false;
      }
      if (kgpingbiswhitezt){
var imgElements = inputElements.find('img');
  var maxImgElement = null;
  var maxImgArea = 0;

  imgElements.each(function() {
    var imgWidth = $(this).width();
    var imgHeight = $(this).height();
    var imgArea = imgWidth * imgHeight;
    if (imgArea > maxImgArea) {
      maxImgArea = imgArea;
      maxImgElement = this;
    }
  });

  var iframeWidth = $(this).width();
  var iframeHeight = $(this).height();
  var iframeArea = iframeWidth * iframeHeight;
  var imgWidth = $(maxImgElement).width();
  var imgHeight = $(maxImgElement).height();
  var imgArea = imgWidth * imgHeight;

  if (imgArea / iframeArea > 0.5) {
    $(this).remove();
     kgpingbiswhitezt = false;
  }
}
         if (kgpingbiswhitezt){
$(this).remove();
}
    } catch (error) {
      console.log('读取 iframe 失败');
    }

} catch (error) {
  console.log('第', index + 1, '个非同源的 iframe');
}

 	}
 		 	  })


function getImageSize(element) {
	 if (element.attr('kxtool') ) {
  	    return false;
	}
  if (element.prop('tagName') === 'HTML' || element.prop('tagName') === 'HEADER'  || element.prop('tagName') === 'BODY' || element.prop('tagName') === 'MAIN') {
  	    return false;
	}
	  var childElements = element.find("*");
  for (var i = 0; i < childElements.length; i++) {
    var childTag = $(childElements[i]).prop('tagName');

    if (childTag === 'HTML' || childTag === 'HEADER' || childTag === 'BODY'  || childTag=== 'MAIN') {
      return false;
    }
  }
  var $elem = element;
  var targets = [];
  if ($elem.prop('tagName') === 'IMG') {
    targets.push($elem);
  }

    var $imgs = $elem.find('img');
    if ($imgs.length > 0) {
      var maxWidth = 0;
      $imgs.each(function() {
        var width = $(this).prop('naturalWidth') || $(this).width();
        if (width > maxWidth) {
          maxWidth = width;
          targets.push($(this));
        }
      });
    }

  var $bgImgs = $elem.find('*').filter(function() {
    var style = getComputedStyle(this);
    return (
      style['background-image'] !== 'none' && style['background-image'] !== ''
    ) || (
      style['background'] && style['background'].includes('url(')
    );
  });
  if ($bgImgs.length > 0) {
    $bgImgs.each(function() {
      targets.push($(this));
    });
  }


  if (targets.length > 0) {
    var maxTarget = targets.reduce(function(max, target) {
      var width = target.width();
      return width > max.width ? {target: target, width: width} : max;
    }, {target: null, width: 0});

if (maxTarget.target) {
  return {
    width: maxTarget.width,
    tag: maxTarget.target.prop('tagName'),
    url: maxTarget.target.attr('src'),
    rl: maxTarget.target.attr('style'),
    height: maxTarget.target.height()
  };
}
  }

  return false;
}

var windowHeight = $(window).height();
var windowwidth= $(window).width() *0.8;
var removeHeight=200;
if (isMobile()){
	 removeHeight=150;
}
var datag=true;
    if (window.location.href.indexOf('dadi') >0 || window.location.href.indexOf('teng') >0 ) {
    	datag=false;
    }
    if (datag){
    	   	$('img').filter(function() {
  var $this = $(this);
  var offsetTop = $this.offset().top;
  return offsetTop >= 50 &&  $this.parents('picture').length === 0 &&  $this.width() >= windowwidth && $this.height() >10 && $this.height() <= removeHeight && $this.is(':visible');
}).remove();

$('[style*="position: fixed"]').add('*')
  .filter(function() {
    return ($(this).css('position') === 'fixed');
  })
  .filter(function() {
    var classes = $(this).attr('class');
    return (!classes || !classes.match(/\b.*nav.*\b/));
  })
  .filter(':visible')
  .not('form, input')
  .each(function() {
    var $this = $(this);
    var hasFormOrInput = $this.find('form, input').length > 0;
    if (hasFormOrInput) {
      return;
    }
    var $imgs = $this.find('img');
    if ($imgs.length === 0) {
      return;
    }
    var $maxImg = $imgs.eq(0);
    var divarea = $this.width() * $this.height();

    let getSize = getImageSize($this);
    if (getSize) {
      var IMGarea = getSize.width * getSize.height;
      if (IMGarea >= divarea * 0.8) { 
        $this.remove();
      } else {
        let Divthistext = /^\s*$/.test($this.text());
        if (Divthistext) {
          $this.remove();
        }
      }
    }
  });

}
		}
		
  }
  
  
  
  
  
  //=============
  
  
    var debugMode = false; // 是否处于调试模式
    var currentElement = null; // 当前鼠标所在的元素

	function ProactivelyadsBtn() {
			if (GM_info.script.namespace!="Z3JlYXN5Zm9yaw=="){ 
return
}
var butjc = GM_getValue('Proactivelyads', '0');
 if (butjc=='0'){
$('<div  id="debugBtnBtn"  style="position: fixed; top: 50px; right: 0; z-index: 9999; padding: 6px 12px; background: rgba(255, 255, 255, .7); cursor: pointer;    background-color: #e1e1e1;   border-radius: 10px;"><button id="debugBtn" style=" margin-right: 10px; border: none; border-radius: 10px;   background-color: #6175bd;  color: white;padding: 8px 10px;  font-size: 15px;display: initial;">调试模式</button><button id="debugresetBtn" style=" margin-right: 10px; border: none; border-radius: 10px;   background-color: #6175bd;  color: white;padding: 8px 10px;  font-size: 15px;display: initial;" > 恢复默认</button><button id="debugExitBtn"  style=" margin-right: 10px; border: none; border-radius: 10px;   background-color: #6175bd;  color: white;padding: 8px 10px;  font-size: 15px;display: initial;">退出</button></div>').appendTo(document.body);
}
}
    // 定义变量

    // 创建样式
  GM_addStyle(`
        .debug-mask {
            position: fixed;
            top: 0;
            left: 0;
            right: 0;
            bottom: 0;
            background: rgba(255, 255, 255, .5);
            z-index: 9998;
            display: none;
        }
.debug-border { border: 2px solid red !important; box-shadow: 0 0 5px rgba(0, 0, 0, .3) !important; position: relative; }

        `);

    // 鼠标移过元素时触发的事件
    function mouseOverHandler(event) {
        if (debugMode) {
            var elem = event.target;
            let tagName=$(elem).prop('tagName');
            	if ( tagName.includes("BODY")||tagName.includes("HTML")||tagName.includes("HEADER") ||tagName.includes("MAIN")){
		return
	}

            	 let targetid = $(elem).attr("id");
	  let targetclass = $(elem).attr("class");
	  if ($(elem).attr("mytool")){
	  return;
}
	  if (targetid){
	if (targetid=="debugBtn" || targetid=="debugBtnBtn" || targetid=="debugresetBtn" || targetid=="debugExitBtn"  || targetid=="mytoolzxmenu" || targetid=="mytoolzxmenu" || targetid=="mytoolzxmenuPage" ){
		return
	}
	}
	if (targetclass){
		if ( targetclass.includes("subItem")||targetclass.includes("menuItem")){
		return
	}
}

            if (currentElement !== elem) {
                hideDeleteBtn(currentElement);
                currentElement = elem;
                showDeleteBtn(elem);
            }
            elem.classList.add('debug-border');
        }
    }

    // 显示元素的删除按钮
    function showDeleteBtn(elem) {


    }

$("body").on('click', '#debugExitBtn', function(event) {
	     toastr.success('已退出!', '', { positionClass: 'toast-bottom-right', showDuration: 300, hideDuration: 1000, timeOut: 3000, extendedTimeOut: 1000, showEasing: 'swing', hideEasing: 'linear', showMethod: 'fadeIn', hideMethod: 'fadeOut' });
       
	debugMode = false;
	 hideDeleteBtn(currentElement);
        currentElement = null;
        document.body.removeEventListener('mouseover', mouseOverHandler, true);
            
 GM_setValue('Proactivelyads','1');
  $("#debugBtnBtn").remove();
    	});
    $("body").on('click', '#debugresetBtn', function(event) {
var domain = window.location.host;
var domainadValue = GM_getValue('domainad') || {};
delete domainadValue[domain];
GM_setValue('domainad', domainadValue);
    	 location.reload();
    	});
// 点击元素的删除按钮后的操作
$("body").on('click', '.debug-border', function(event) {
	toastr.success('已删除此元素!', '', { positionClass: 'toast-bottom-right', showDuration: 300, hideDuration: 1000, timeOut: 3000, extendedTimeOut: 1000, showEasing: 'swing', hideEasing: 'linear', showMethod: 'fadeIn', hideMethod: 'fadeOut' });
 
    event.stopPropagation(); // 阻止事件冒泡
    event.preventDefault(); // 阻止默认行为
    let targetid = $(this).attr("id");
    let targetclass = $(this).attr("class");
    if (targetid && (targetid == "debugBtn" || targetid == "debugresetBtn" || targetid == "mytoolzxmenu" || targetid == "mytoolzxmenuPage")) {
        return;
    }
    if (targetclass && (targetclass.includes("subItem") || targetclass.includes("menuItem"))) {
        return;
    }

   getAdFeatures(this);


  $(".debug-border").remove(); // 移除点击的元素
});

function updomainad(k) {
	    if (window.location.href.indexOf('dadi') >0 || window.location.href.indexOf('teng') >0 ) {
    return;
    }
	var domain = window.location.host;
var domainadValue = GM_getValue('domainad') || {};
  if (!domainadValue[domain]) {
    domainadValue[domain] = {};
  }
domainadValue[domain][k]  =true;
GM_setValue('domainad', domainadValue);

}
	// 获取元素标签名、id、class、style、src、href 的广告特征
function getAdFeatures(elem) {
  let features = '';
  let tagName = '';
  var domain = window.location.host;
  if (elem.tagName) {
  tagName= elem.tagName.toLowerCase();
    }



  if (elem.id) {
   features = tagName+'#' + elem.id;
updomainad(features);
    }
    if (elem.classList && elem.classList.length > 0) {
    	  let classtxt='[class="' + $(elem).attr('class').replace(/debug-border/g, '')+ '"]';
    	if (classtxt!='[class=""]'){
  var lastSpaceIndex = classtxt.lastIndexOf(" ");
  if (lastSpaceIndex !== -1) {
      classtxt = classtxt.substring(0, lastSpaceIndex) + "" + classtxt.substring(lastSpaceIndex + 1);
  }
  features=tagName+classtxt;
updomainad(features);
}
    }

  if (elem.style.cssText) {
  let styletxt='[style^="' + $(elem).attr('style')+ '"]';
    features=tagName+styletxt;
updomainad(features);
   }
  if (elem.src) {
 let elemurl=elem.src;
 let matchStr = elemurl.match(/\/\/[^/]*\/(.+?)([.?]|$)/);
elemurl = matchStr[1];

   features = tagName+'[src*="' + elemurl + '"]';
updomainad(features);
   }
  if (elem.href) {
 let elemurl=elem.href;
 let matchStr = elemurl.match(/\/\/[^/]*\/(.+?)([.?]|$)/);
elemurl = matchStr[1];
      features = tagName+'[href*="' + elemurl + '"]';

updomainad(features);

   }

  // return features;
}
    // 隐藏元素的删除按钮
    function hideDeleteBtn(elem) {
        if (elem) {
            elem.classList.remove('debug-border');
        }
    }

    // 遍历并隐藏元素的所有子节点
    function hideElementContent(elem) {
        $(elem).children().each(function() {
            hideElementContent(this);
            $(this).hide();
        });
    }

    // 点击调试按钮后的操作
$("body").on('click', '#debugBtn', function() {
        debugMode = !debugMode;
        if (debugMode) {
            document.body.addEventListener('mouseover', mouseOverHandler, true);
 
  
  toastr.success('已进入调试模式!移动鼠标,可以点击你需要删除的页面元素包括广告。误删可以使用恢复按钮即可让页面恢复正常。适合大部分网页。重新打开页面生效!', '', { positionClass: 'toast-bottom-right', showDuration: 300, hideDuration: 1000, timeOut: 3000, extendedTimeOut: 1000, showEasing: 'swing', hideEasing: 'linear', showMethod: 'fadeIn', hideMethod: 'fadeOut' });
  
        } else { 
  
    toastr.success('已关闭调试模式!', '', { positionClass: 'toast-bottom-right', showDuration: 300, hideDuration: 1000, timeOut: 3000, extendedTimeOut: 1000, showEasing: 'swing', hideEasing: 'linear', showMethod: 'fadeIn', hideMethod: 'fadeOut' });
    
            hideDeleteBtn(currentElement);
            currentElement = null;
            document.body.removeEventListener('mouseover', mouseOverHandler, true);
        }
    });
  // 自动隐藏符合广告特征的元素


function Proactivelyads() {
	if (GM_info.script.namespace!="Z3JlYXN5Zm9yaw=="){ 
return
}
	  var domain = window.location.host;
    var adFeaturesStr = GM_getValue(domain, '');
var domainadValue = GM_getValue('domainad');
var adFeaturesStr = domainadValue && domainadValue[domain] ? domainadValue[domain] : '';
if (adFeaturesStr==""){
	return
}
    for (var featureStr in adFeaturesStr) {
try {
 var selector = featureStr;

      if (selector.includes('[class="')) {
  var match = selector.match(/class\s*=\s*"([^"]+)"/);
  if (match && match[1]) {
  var classes = match[1].split(/\s+/);
  var tagName = selector.split('[')[0];
     selector = tagName + '.' + classes.join('.');
    $(selector).remove();
  }
}else{
	    $(selector).remove();
}
} catch (err) {
console.log('执行出错');
}


    }
  }