Greasy Fork 支持简体中文。

无限制阅读经济学人

让你无弹窗、无限制的阅读经济学人。

// ==UserScript==
// @name         无限制阅读经济学人
// @namespace
// @version      3
// @description  让你无弹窗、无限制的阅读经济学人。
// @author       August
// @match        *.economist.com/*
// @require      https://cdn.bootcss.com/jquery/3.5.1/jquery.min.js
// @grant        本脚本仅供学习只用,如若他用,后果自行承担。
// @namespace 
// ==/UserScript==
$(function() {
    'use strict';
    //let del = ['#_evidon_banner','#amp-regwall','#gpt-ad-slot-regwall','.related-articles','.layout-article-regwall','.ds-layout-grid.ds-layout-grid--edged.newsletter-signup']
    let del = ['.layout-sticky-rail-advert-wrapper','#tp-regwall','#AdBillboard','#gpt-ad-slot-right-rail-r0','#gpt-ad-slot-regwall','#gpt-ad-slot-regwall','.newsletter-signup','#_evidon_banner']

    //广告定时器,去除5个广告或10s后或找不到广告后关闭定时器
    let timer_times = 10
    let ad_times = 5
    let del_ad = false
    let timer1 =  setInterval(() => {
        del.forEach(item => {
            if ($(item)) {
                $(item).remove()
                ad_times--
                del_ad = true
            }
        })
        timer_times--
        if(ad_times == 0|| timer_times ==0 || del_ad == false){
            clearInterval(timer1)
            console.log('广告已关闭')
        }
    }, 1000)


    function addContent(jsonData){
        let para =''
        for(let ii = 0;ii<jsonData.length;ii++){
            switch(jsonData[ii].type){
                case 'text':
                    para += jsonData[ii].data
                    break
                case 'tag':
                    let attr = ''
                    Object.keys( jsonData[ii].attribs).forEach(function(key){
                        attr += ' '+key+'="'+jsonData[ii].attribs[key]+'"'
                    })
                    para += '<' + jsonData[ii].name + attr +'>' + addContent(jsonData[ii].children) + '</' + jsonData[ii].name + '>'
                    break
                default:
                    para += '<u>' + JSON.stringify(jsonData[ii]) + '</u>'
                    break
                }
        }
        return para
    }

    //选取文章元素
    let postQuery = "#content p.article__body-text";
    //选取文章内容Json
    let jsonData = '#__NEXT_DATA__'
    let nextData = $(jsonData)
    let parentNode = '.layout-article-body'

    let timer2 =  setInterval(() => {
        if($(postQuery).length<=2){
            if($(postQuery)){$(postQuery).remove();}//删除文章内容

            //重新填充内容
            if(nextData.length){
                //找出文章内容
                let data = JSON.parse(nextData[0].textContent).props.pageProps.content.text
                let figure_cal =false;
                //开始按规则填充
                let para = ''//新建段落
                for(let i=0;i<data.length;i++){
                    if(data[i].type=='tag'){
                        switch(data[i].name){
                            case 'p':
                                para += '<p class="article__body-text">'+addContent(data[i].children)+'</p>'
                                break;
                            case 'figure':
                                if(data[i].attribs.itemtype == 'https://schema.org/ImageObject')
                                {
                                    for(let ii = 0;ii<data[i].children.length;ii++){
                                        if(data[i].children[ii].name == 'img'){
                                            if(figure_cal){
                                                para+='</div>'
                                                figure_cal=false
                                            }
                                            para += '<div class="article__body-text-image"><figure><div><img src="'+ data[i].children[ii].attribs.src +'"'+'style="/*height:'+data[i].children[ii].attribs.height+'px;width:'+data[i].children[ii].attribs.width+'px*/"'+'></div></figure>'
                                            figure_cal=true
                                        }
                                    }
                                }
                                break;
                            case 'h2':
                                para += '<h2>'+addContent(data[i].children)+'</h2>'
                                break;
                            default:
                                para += '<'+data[i].name+'>'+addContent(data[i].children)+'</'+data[i].name+'>'+'>'
                                break;
                        }
                    }
                }
                if(figure_cal){
                    para+='</div>'
                    figure_cal=false
                }
                $(parentNode).append(para)
            }
            clearInterval(timer2)
            console.log("脚本运行完毕")
        }
    }, 1000)
})