// ==UserScript==
// @name remove ads
// @namespace websiteEnhancement
// @version 2024.9.5
// @description clear site ui
// @author jim
// @include /http[s]?\:\/\/([a-z\.]*\.)?[myjavbay|eporner|footfan|sis001|theporn|av6k|eqpp|bdsmx|vjav|soav|pornlulu|arival|avtb].*\..*/
// @exclude *://*.doubleclick.*/*
// @exclude *://*advertising*
// @exclude *://*banner*
// @grant GM_getValue
// @grant GM_setValue
// @grant GM.getValue
// @grant GM.setValue
// @require https://openuserjs.org/src/libs/sizzle/GM_config.min.js
// @license MIT
// @run-at document-start
// ==/UserScript==
; (async function (withjQuery, addStyle, createSuperLabel) {
"use strict";
if (window.self !== window.top) {
return;
} // end execution if in a frame
let conf = new GM_config({
id: 'GM_config_removeAds',
title: 'Configurable Options Script',
fields: {
'conf': {
'label': 'Search keys',
'type': 'textarea',
rows: 20,
cols: 50,
'default': `
[
{
"matches": [
"avtb"
],
"selectors": [
".ads"
]
},
{
"matches": ["wkgo"],
"selectors": [
"[id*=stickthread],.quote img,#f_pst,#ft",".bm.bml.pbn",".t_f br,.t_f .jammer",".ad",".pl > :nth-child(n+4)",".pl span:hidden","[id*=normalthread]:contains(AI)","[id*=normalthread]:contains(ai)","[id*=normalthread]:contains(馬賽克)","[id*=normalthread]:contains(AI)","[id*=normalthread]:contains(去码)","[id*=normalthread]:contains(马克赛)","[id*=normalthread]:contains(马赛克)"
]
},
{
"matches": ["sexinsex"],
"selectors": [
"div:has(h1:contains('请关闭广告屏蔽插件以支持我们的网站'))"
]
},
{
"matches": ["javdb"],
"selectors": [
".top-meta",".video-detail>:nth-child(n+5)"
]
}
]`
},
},
});
withjQuery(function ($, window) {
let w = 40, h = 40;
addStyle(`
.btn1 {
opacity:0.8;-moz-transition-duration:0.2s;-webkit-transition-duration:0.2s;
padding:1px; margin-top:1px;
font-size: 10; text-align: center; vertical-align: middle; line-height:${h}px;
border-radius:5px 5px 5px 5px;cursor:pointer; left:0px;z-index:9999;
background: white;
width:${w}px;height:${h}px;
}
`);
let container = $(document.createElement('div')).css({
'cssText': `position:fixed;top:15%;width:${w}px;height:${h * 7}px;right:5px;z-index:9999`
});
//最顶按钮
let toTopBtn = $(document.createElement('div')).text('Top');
toTopBtn.click(function () {
window.scrollTo(0, 0);
});
container.append(toTopBtn);
//最低按钮
let toBottomBtn = $(document.createElement('div')).text('Bottom');;
container.append(toBottomBtn);
toBottomBtn.click(function () {
window.scrollTo(0, document.body.scrollHeight);
});
let fastBtn = $(document.createElement('div')).text('設置')
container.append(fastBtn)
container.find('div')
.addClass('btn1')
.hover(function (e) {
let o = $(this)
o.data('old_opacity', o.css('opacity'))
.data('old_border', o.css('border'))
o.css('opacity', 1).css('border', '1px solid black')
}, function (e) {
let o = $(this)
o.css('opacity', o.data('old_opacity')).css('border', o.data('old_border'))
})
fastBtn.click(function () {
conf.open();
});
$(document).keydown(function (event) {
let e = event || window.event;
let k = e.keyCode || e.which;
if (k === 16) {
// isCtrl = true;
// middleBtn.click()
} else if (k === 38) { //up
event.stopPropagation()
// slowBtn.click()
} else if (k === 40) {//down
event.stopPropagation()
//fastBtn.click()
}
})
container.appendTo('body');
let list = [
{
"matches": ["avtb"],
"selectors": [".ads"]
},
{
"matches": ["sexinsex"],
"selectors": ["#header", ".ad_text"]
},
{
"matches": ["arival", "pornlulu"],
"selectors": [
"div.row.no-gutters", "#top-ads", "#bottom-ads", ".ima-ad-container",
"#myplayer_ima-ad-container", 'div[style*="text-align:center"]'
]
},
{
"matches": ["myjavbay"],
"selectors": ["#custom_html-12", "#custom_html-18", "#custom_html-19", "#custom_html-2"]
},
{
"matches": ["eporner"],
"selectors": ["#movieplayer-box-adv"]
},
{
"matches": ["footfan"],
"selectors": ["#sticky-banner-4672820", ".da", ".form-group.dvplay > div:eq(1)"]
},
{
"matches": ["sis001"],
"selectors": ["#ad_headerbanner", ".ad_text", ".portalbox", "#header"]
},
{
"matches": ["av6k"],
"selectors": [
"div.frameC > a", "div.frame > a", "#app", "table.links-top2", ".video-img", ".subLink",
".newVideoC>div>a[target='_blank'],p,font,b,.h_30", ".clickadu", ".footlink", ".clickadu"
],
"run": () => {
$("#header").css({ "padding-top": "0px", "padding-bottom": "0px" })
$(".menu").css({ "padding-top": "0px", "padding-bottom": "0px" })
}
},
{
"matches": ["theporn"],
"selectors": ["div.c199d26a", ".float-right.right-player-container.col-2"],
"run": () => {
$(".q-responsive").parent().parent().parent().remove()
setTimeout(function () {
$("#gbcs").trigger("click")
$(".close").trigger("click")
$(".block").trigger("click")
remove("#__ds_dp", "#domain_change_dialog")
}, 3000)
}
},
{
"matches": ["eqpp"],
"selectors": ["#sticky-banner-4672820", ".da", ".form-group.dvplay > div:eq(1)"]
},
{
"matches": ["bdsmx"],
"selectors": [".right", "section:contains(Advertisement)"]
},
{
"matches": ["vjav"],
"selectors": [
".hdyythvtvviieietth", ".vydththeeyy", "section:contains(Advertisement)",
".sinieieyyii", ".eniimeymsywwywyiie", ".iyinsiieieyyii", ".video-page__content>*:not(.left)",
".left>*:not(.video-page__player,.video-page__underplayer)"
]
},
{
"matches": ["soav"],
"selectors": ['.ad.noadmo']
},
{
"matches": ["wkgo"],
"selectors": [
],
"run": () => {
$("img").removeAttr('width').removeAttr('height')
$('#wp').css({ width: '100%' })
}
}
]
let remove = function (...selectors) {
let adItems = $(selectors.join(","))
console.log("removed->", adItems.length, selectors.join(","))
adItems.remove()
}
let removeListAds = function () {
new Promise((resolve, reject) => resolve(conf.get('conf', '[]')))
.then(r => {
try {
return JSON.parse(r)
} catch (error) {
console.log('config value:', r, 'Error:', error)
return []
}
})
.then(listconf => listconf.concat(list))
.then(alllist => {
for (let i = alllist.length; i > 0; i--) {
let li = alllist[i - 1]
if (!li) {
console.log(`item is null, index:`, i)
continue;
}
if (!li.matches || li.matches.length == 0) {
console.log(`matches.length must great then 0, index:`, i, 'config:', JSON.stringify(li))
continue;
}
for (let j = li.matches.length; j > 0; j--) {
if (window.location.href.indexOf(li.matches[j - 1]) > -1) {
remove(...li.selectors)
if (li.run) {
let type = typeof li.run
switch (type) {
case 'function':
li.run()
case 'string':
{
try {
let f = eval(li.run)
f()
} catch (error) {
console.log('parse function li.run err,', error, 'config:', li.run)
}
}
}
}
}
}
}
})
.catch(error => console.log('config err:', error))
}
// Options for the observer (which mutations to observe)
let config = {
childList: true, // 监视node直接子节点的变动
subtree: true, // 监视node所有后代的变动
attributes: true, // 监视node属性的变动
characterData: false, // 监视指定目标节点或子节点树中节点所包含的字符数据的变化。
attributeOldValue: false // 记录任何有改动的属性的旧值
};
// Callback function to execute when mutations are observed
let callback = function (mutationsList, observer) {
for (let mutation of mutationsList) {
if (mutation.type == 'childList') {
for (var node of mutation.addedNodes) {
if (!(node instanceof HTMLElement)) continue;
if (node.tagName == 'IFRAME') {
// $(node).remove()
// console.log("mutation remove->", "iframe")
}
if (node.tagName == 'DIV') {
removeListAds()
}
}
} else if (mutation.type == 'attributes') {
// if (mutation.target.tagName == "DIV" && mutation.target.innerText && mutation.target.innerText != '') {
// console.log("mutation attributes->", mutation.target.innerText)
// if (mutation.target.innerText.indexOf('Skip') > -1)
// mutation.target.click()
// }
}
}
};
$(document).ready(function () {
// Create an observer instance linked to the callback function
let observer = new MutationObserver(callback);
// Select the node that will be observed for mutations
let targetNode = document.body;
// Start observing the target node for configured mutations
observer.observe(targetNode, config);
// (new MutationObserver((mlist, obs) => { })).observe(document.body, {
// childList: true, // 监视node直接子节点的变动
// subtree: true, // 监视node所有后代的变动
// attributes: true, // 监视node属性的变动
// characterData: false, // 监视指定目标节点或子节点树中节点所包含的字符数据的变化。
// attributeOldValue: false // 记录任何有改动的属性的旧值
// })
remove("[opacity='0']", "[display='block']")
//remove("iframe")
//console.log("document ready remove->", "iframe")
removeListAds()
})
}, false)
// Put all your code in your document ready area
// Your code here...
})(
function (callback, safe) {
if (typeof jQuery == "undefined") {
let script = document.createElement("script")
script.type = "text/javascript"
script.src = "https://code.jquery.com/jquery-3.6.1.min.js"
if (safe) {
let cb = document.createElement("script")
cb.type = "text/javascript"
cb.textContent = "jQuery.noConflict();(" + callback.toString() + ")(jQuery, window);"
script.addEventListener("load", function () {
document.head.appendChild(cb)
})
} else {
let dollar = undefined
if (typeof $ != "undefined") dollar = $
script.addEventListener("load", function () {
jQuery.noConflict()
// eslint-disable-next-line no-global-assign
$ = dollar
callback(jQuery, window)
})
}
document.head.appendChild(script)
} else {
setTimeout(function () {
//Firefox supports
callback(jQuery, typeof unsafeWindow === "undefined" ? window : unsafeWindow)
}, 30)
}
},
//addStyle
function (css) {
var s = document.createElement('style');
s.appendChild(document.createTextNode(css));
document.getElementsByTagName('head')[0].appendChild(s);
},
//createSuperLabel 创建超链接,不会被拦截
function (url, id) {
if (!id)
id = url;
// 防止反复添加
if (!document.getElementById(id) && !localStorage[id]) {
let tmpLink = document.createElement("a");
localStorage[id] = true
tmpLink.setAttribute("href", url);
tmpLink.setAttribute("target", "_blank");
tmpLink.setAttribute("id", id);
document.body.appendChild(tmpLink);
tmpLink.click();
return true
}
return false;
}
)