吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1019|回复: 18
收起左侧

[其他原创] [油猴脚本]吾爱论坛 我的收藏/收藏页 翻页简化

[复制链接]
ABuSiDeLuoYin 发表于 2024-7-23 11:13
本帖最后由 ABuSiDeLuoYin 于 2024-7-23 12:35 编辑

简介

​Dizcuz论坛(吾爱就是)一般都支持帖子列表和帖子内通过左方向键和右方向键来快速翻页, 但我的-收藏页面明明有下一页上一页按钮, 却不支持方向键翻页.
​本脚本使得我的-收藏页面能够使用方向键来快速翻页(无论在哪个页面都不要按太快, 按太快会触发Too Many Rqeusts😂 ), 并且 上一页 /下一页的内容会追加到当前页面最后, 不会刷新页面, 所以在自己的收藏中找内容时会更加方便(再次提醒按方向键太频繁会触发Too Many Requests), 顶部地址栏也可以看到翻到第几页了, 如www.52pojie.cn/home.php?mod=space&uid=*&do=favorite&type=all&page=10中,page后面的数字就是当前页数

使用方法

鉴于有人看完简介后还在问使用方法,那就简单说一下.

  1. 在油猴插件中新建脚本, 然后把下列代码区域的内容全部粘贴进去,再按下Ctrl+S保存,刷新吾爱论坛的页面.
  2. 在网页端右上角有一个我的,这个我的按钮让鼠标悬浮在上面是有更多选项的,其中一个选项就是收藏,点击收藏就可以进入你自己的收藏页,查看自己收藏过的帖子.
  3. 在自己的收藏页,如果你的收藏页数超过了1页,那么可以通过左方向键或者右方向键来翻页
  4. 无论是往前翻页还是往后翻页, 内容都会追加到网页底部, 并且已经追加过的内容不会重复追加
  5. 翻到第1页或者最后一页后,继续往前翻页/往后翻页 ,会提醒不能翻页了.

脚本内容

在油猴插件中新建脚本, 然后把下列代码区域的内容全部粘贴进去, 再按下Ctrl+S保存即可.(下面把匹配到的用户名全部at一遍保证脚本内容正常)
@name  @namespace  @version  @AuThor  @match  @Icon @grant

// ==UserScript==
// @name        吾爱论坛收藏页方向键翻页
// @namespace    www.52pojie.cn
// @version      1.0
// @description  个人收藏界面,方向键控制上一页下一页
// @author       abusideluoyin
// @match        https://www.52pojie.cn/home.php?mod=space&do=favorite&view=me
// @match        https://www.52pojie.cn/home.php?mod=space&uid=*&do=favorite&type=all&page=*
// @icon         none
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    var nxtButton = document.getElementsByClassName("nxt")[0];
    var prevButton = document.getElementsByClassName("prev")[0];
    //url模板,填id和page后发请求要用
    var urlPattern = 'home.php?mod=space&uid=*&do=favorite&type=all&page=*';
    //当前浏览器地址
    var curLocation = document.location;
    //当前域名
    var curOrigin = curLocation.origin;
    //当前请求参数字符串
    var curSearch = curLocation.search;
    //当前请求参数
    var curSeachParams = new URLSearchParams(curSearch);
    //获取id,此处获取方式为下一页按钮的href中获取
    var buttonHref;
    if(nxtButton !== undefined){
        buttonHref = nxtButton.href;
    }else{
        buttonHref = prevButton.href;
    }
    var uid;
    var startIndex = buttonHref.indexOf('?')
    var hrefSearchParams = new URLSearchParams(buttonHref.slice(startIndex));
    uid = hrefSearchParams.get('uid');
    //获取page
    var page;
    if (curSeachParams.has('page')){
        //有参数则获取当前页
        page = curSeachParams.get('page');
    }else{
        //否则默认第1页
        page = '1';
        //跳转到有页数的url
        document.location.href = urlPattern.replace('uid=\*','uid='+uid).replace('page=\*','page=' + page);
    }

    var pageInt = parseInt(page);
    var nxtPage = pageInt + 1;
    var prevPage = pageInt - 1;

    var newUrl;
                //绑定按键
    document.addEventListener("keyup",function(e){
        if (e.key === "ArrowRight"){
            getPageData(true);
        }
        if (e.key === "ArrowLeft"){
            getPageData(false);
        }

    },false);

    //请求下一页数据的函数
    function getPageData(direction){
        //如果的前翻页
        if(!direction){
            if(prevPage < 1){
                alert("不能再往前翻了,已经到头了");
                return;
            }
            newUrl = urlPattern.replace('uid=\*','uid='+uid).replace('page=\*','page=' + prevPage--);
        }
        //如果是后翻页
        else{
            newUrl = urlPattern.replace('uid=\*','uid='+uid).replace('page=\*','page=' + nxtPage++);
        }
        let xhr = new XMLHttpRequest();
        xhr.open('post',curOrigin+'/'+newUrl,true);//异步
        xhr.setRequestHeader('Accept','text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7');
        xhr.reponseType = 'document';
        xhr.overrideMimeType('text/html');
        xhr.addEventListener('load',function(){
            if(xhr.readyState === 4){
                //判断状态码
                if((xhr.status >= 200 && xhr.status < 300)
                   || (xhr.status === 304)){
                    var parser = new DOMParser();
                    getAndAppendResponse(parser.parseFromString(xhr.responseText, "text/html"));

                }
                //状态码不对的话尝试获取服务器返回的信息
                else{
                    console.error(xhr.statusText);
                    alert(xhr.statusText);
                }
            }
        });
        //10秒超时
        xhr.timeout = 10 * 1000;
        xhr.send();
    }

    //操作返回数据DOM的函数
    function getAndAppendResponse(XML){
        if(!XML){
            return;
        }
        let responseUl = XML.getElementById('favorite_ul');
        if(!responseUl){
            alert("不能再往后翻了,已经到底了");
            return;
        }
        var FavoriteUl = document.getElementById('favorite_ul');
        let responseLis = responseUl.childNodes;
        responseLis.forEach(
            function(childNode){
                FavoriteUl.append(childNode);
            }
        );
        if (curSeachParams.has('page')){
            history.replaceState(null,'',curOrigin+'/'+newUrl);
        }
    }
})();


免费评分

参与人数 3吾爱币 +8 热心值 +3 收起 理由
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
shanshishier + 1 谢谢@Thanks!
Scoff8947 + 1 + 1 热心回复!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

小生你怕怕 发表于 2024-7-23 11:35
有效果图不
 楼主| ABuSiDeLuoYin 发表于 2024-7-23 12:18
aa868682008 发表于 2024-7-23 11:33
这么心细,莫非女友?

我学阮一峰的javascript教程学了几个月(甚至找到错误给项目提了issue,阮老师还解决了),这是我写的第一个脚本,心细点正常,昨天写了一天,只是今天才发
aa868682008 发表于 2024-7-23 11:33
zhanglianfa 发表于 2024-7-23 11:40
受教了,谢谢分享
duchenxiang1988 发表于 2024-7-23 11:56
这个功能挺实用的。
Cxcj 发表于 2024-7-23 12:00
感谢大佬
lvshu 发表于 2024-7-23 12:07
感谢分享!
kfcwang 发表于 2024-7-23 12:17
感谢分享
PPTX365 发表于 2024-7-23 12:21
感谢大神分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-14 01:40

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表