16713720339 发表于 2024-8-1 08:36

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

//添加一个“播放播放”按钮

// 创建一个 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出来的,把上下两部分分开可以实现,现在拼不到一起了,求大佬指点{:1_936:}

星峰 发表于 2024-8-1 09:27

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

//添加一个“播放播放”按钮
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
//添加一个“播放播放”按钮
var concatenatedString2
// 创建一个 Mutati ...

ai生成的吧,试过没有,哈哈。

16713720339 发表于 2024-8-1 10:16

ruikai 发表于 2024-8-1 09:28
点击事件没有移除吧

什么意思,不太明白{:1_937:}

16713720339 发表于 2024-8-1 10:17

星峰 发表于 2024-8-1 09:27
//添加一个“播放播放”按钮
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
//添加一个“播放播放”按钮
var concatenatedString2
// 创建一个 Mutati ...

感谢大佬。成功了{:1_893:}

wasm2023 发表于 2024-8-1 12:52

有什么api可以实现对一个web视频定时截图呢
页: [1] 2
查看完整版本: 写了个油猴脚本有些不明白的地方,请大佬指点