吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1129|回复: 10
收起左侧

[求助] 写了个油猴脚本有些不明白的地方,请大佬指点

[复制链接]
16713720339 发表于 2024-8-1 08:36
[JavaScript] 纯文本查看 复制代码
//添加一个“播放播放”按钮

// 创建一个 MutationObserver 实例
var observer = new MutationObserver(function(mutationsList) {
    mutationsList.forEach(function(mutation) {
        // 检查每个新增的节点
        mutation.addedNodes.forEach(function(node) {
            // 如果新增的节点是 js_float_content 元素
            if (node.id === 'js_float_content') {
                // 运行您的代码
                (function() {
                    'use strict';

                    // 创建一个新的播放按钮元素
                    var playButton = document.createElement("a");
                    playButton.setAttribute("href", "javascript:;");
                    playButton.classList.add("button", "btn-play");
                    playButton.innerHTML = '<span>播放播放</span>';



                    // 找到顶部文件路径容器
                    var topFilePathBox = document.getElementById('js_float_content');

                    if (topFilePathBox) {
                        // 找到文件路径元素
                        var filePathElement = topFilePathBox.querySelector('.cell-icon');

                        if (filePathElement) {
                            // 插入新的播放按钮到文件路径元素中
                            filePathElement.appendChild(playButton);
                        } else {
                            console.log("File path element not found.");
                        }
                    } else {
                        console.log("Top file path box element not found.");
                    }
                })();
            }
        });
    });
});

// 配置并启动 observer 来监视整个文档
observer.observe(document, { childList: true, subtree: true });








//获取返回的xhr数据,获取文件路径

(function() {
    'use strict';

    // 监听 XHR 请求
    function monitorXHR() {
        var open = XMLHttpRequest.prototype.open;
        var send = XMLHttpRequest.prototype.send;

        XMLHttpRequest.prototype.open = function(method, url) {
            this._url = url;
            return open.apply(this, arguments);
        };

        XMLHttpRequest.prototype.send = function() {
            this.addEventListener('load', function() {
                if (this.responseType === '' || this.responseType === 'text') {
                    try {
                        var responseData = JSON.parse(this.responseText);
                        if (responseData.file_name) {
                            console.log('Extracted file_name: ' + responseData.file_name);
                            // 解析 JSON 数据
                            const data = JSON.parse(this.responseText);

                            // 获取 paths 中所有 file_name 的值
                            const fileNames = data.paths.map(path => path.file_name);

                            // 过滤包含“根目录”这三个字的文件名
                            const filteredFileNames = fileNames.filter(name => !name.includes("根目录"));

                            // 将所有文件名连接成一个字符串,使用逗号分隔
                            const concatenatedString = filteredFileNames.join('/');
                            const concatenatedString2 = concatenatedString+'/'+responseData.file_name
                            // 打印连接后的字符串
                            console.log(concatenatedString2);







                            var specialButton = document.querySelector('.btn-play');




                            // 添加点击事件监听器
                            specialButton.addEventListener('click', function() {
                                // 在新标签页中打开链接
                                window.open(concatenatedString2, '_blank');
                            });
                            











                        }
                    } catch (error) {
                        console.error('Error parsing JSON:', error);
                    }
                }
            });
            return send.apply(this, arguments);
        };
    }

    // 启动监听
    monitorXHR();
})();



上面一段是为了在右键点击时添加一个“播放”按钮。下面一段是为了截取xhr返回的数据,得到这个文件的路径。
现在出现的问题是:
第一次点击右键,控制台输出网址xx1,点击播放按钮会打开一个新标签xx1。
不刷新网页,第二次点击右键,控制台输出xx2,但点击播放按钮会打开两个新标签xx1,xx2。
后面一次类推,右键了几次,点击按钮后就会打开多个新标签。

请问如何改一下代码让点击一次按钮,打开一个最新的网页?

并不会JavaScript代码,是一点一点问ai出来的,把上下两部分分开可以实现,现在拼不到一起了,求大佬指点

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

星峰 发表于 2024-8-1 09:27
本帖最后由 星峰 于 2024-8-1 09:28 编辑

[JavaScript] 纯文本查看 复制代码
//添加一个“播放播放”按钮
var concatenatedString2
// 创建一个 MutationObserver 实例
var observer = new MutationObserver(function(mutationsList) {
    mutationsList.forEach(function(mutation) {
        // 检查每个新增的节点
        mutation.addedNodes.forEach(function(node) {
            // 如果新增的节点是 js_float_content 元素
            if (node.id === 'js_float_content') {
                // 运行您的代码
                (function() {
                    'use strict'; 
                    // 创建一个新的播放按钮元素
                    var playButton = document.createElement("a");
                    playButton.setAttribute("href", "javascript:;");
                    playButton.classList.add("button", "btn-play");
                    playButton.innerHTML = '<span>播放播放</span>';
                    // 添加点击事件监听器
                    playButton.addEventListener('click', function() {
                        // 在新标签页中打开链接
                        window.open(concatenatedString2, '_blank');
                    }); 
 
                    // 找到顶部文件路径容器
                    var topFilePathBox = document.getElementById('js_float_content');
 
                    if (topFilePathBox) {
                        // 找到文件路径元素
                        var filePathElement = topFilePathBox.querySelector('.cell-icon');
 
                        if (filePathElement) {
                            // 插入新的播放按钮到文件路径元素中
                            filePathElement.appendChild(playButton);
                        } else {
                            console.log("File path element not found.");
                        }
                    } else {
                        console.log("Top file path box element not found.");
                    }
                })();
            }
        });
    });
});
 
// 配置并启动 observer 来监视整个文档
observer.observe(document, { childList: true, subtree: true });
 
//获取返回的xhr数据,获取文件路径
 
(function() {
    'use strict';
 
    // 监听 XHR 请求
    function monitorXHR() {
        var open = XMLHttpRequest.prototype.open;
        var send = XMLHttpRequest.prototype.send;
 
        XMLHttpRequest.prototype.open = function(method, url) {
            this._url = url;
            return open.apply(this, arguments);
        };
 
        XMLHttpRequest.prototype.send = function() {
            this.addEventListener('load', function() {
                if (this.responseType === '' || this.responseType === 'text') {
                    try {
                        var responseData = JSON.parse(this.responseText);
                        if (responseData.file_name) {
                            console.log('Extracted file_name: ' + responseData.file_name);
                            // 解析 JSON 数据
                            const data = JSON.parse(this.responseText);
 
                            // 获取 paths 中所有 file_name 的值
                            const fileNames = data.paths.map(path => path.file_name);
 
                            // 过滤包含“根目录”这三个字的文件名
                            const filteredFileNames = fileNames.filter(name => !name.includes("根目录"));
 
                            // 将所有文件名连接成一个字符串,使用逗号分隔
                            const concatenatedString = filteredFileNames.join('/');
                            concatenatedString2 = concatenatedString+'/'+responseData.file_name
                            // 打印连接后的字符串
                            console.log(concatenatedString2); 
 
 
                        }
                    } catch (error) {
                        console.error('Error parsing JSON:', error);
                    }
                }
            });
            return send.apply(this, arguments);
        };
    }
 
    // 启动监听
    monitorXHR();
})();
ruikai 发表于 2024-8-1 09:28
mashuai520 发表于 2024-8-1 09:30
星峰 发表于 2024-8-1 09:27
[mw_shl_code=javascript,true]//添加一个“播放播放”按钮
var concatenatedString2
// 创建一个 Mutati ...

ai生成的吧,试过没有,哈哈。
 楼主| 16713720339 发表于 2024-8-1 10:16
ruikai 发表于 2024-8-1 09:28
点击事件没有移除吧

什么意思,不太明白
 楼主| 16713720339 发表于 2024-8-1 10:17
星峰 发表于 2024-8-1 09:27
[mw_shl_code=javascript,true]//添加一个“播放播放”按钮
var concatenatedString2
// 创建一个 Mutati ...

等回去试一下
lqzlike 发表于 2024-8-1 10:17
specialButton.addEventListener('click', function() {
                            // 在新标签页中打开链接
                            window.open(concatenatedString2, '_blank');
                        });
改成以下代码:
specialButton.addEventListener('click', function() {
                            // 在新标签页中打开链接
                            window.open(concatenatedString2, '_blank');
                        }, { once: true });
838728713 发表于 2024-8-1 11:06
前端你用事件要保证你自己的世界始终是一个
 楼主| 16713720339 发表于 2024-8-1 12:30
星峰 发表于 2024-8-1 09:27
[mw_shl_code=javascript,true]//添加一个“播放播放”按钮
var concatenatedString2
// 创建一个 Mutati ...

感谢大佬。成功了
wasm2023 发表于 2024-8-1 12:52
有什么api可以实现对一个web视频定时截图呢
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-24 12:52

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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