写了个油猴脚本有些不明白的地方,请大佬指点
//添加一个“播放播放”按钮// 创建一个 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: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();
})(); 点击事件没有移除吧 星峰 发表于 2024-8-1 09:27
//添加一个“播放播放”按钮
var concatenatedString2
// 创建一个 Mutati ...
ai生成的吧,试过没有,哈哈。 ruikai 发表于 2024-8-1 09:28
点击事件没有移除吧
什么意思,不太明白{:1_937:} 星峰 发表于 2024-8-1 09:27
//添加一个“播放播放”按钮
var concatenatedString2
// 创建一个 Mutati ...
等回去试一下 specialButton.addEventListener('click', function() {
// 在新标签页中打开链接
window.open(concatenatedString2, '_blank');
});
改成以下代码:
specialButton.addEventListener('click', function() {
// 在新标签页中打开链接
window.open(concatenatedString2, '_blank');
}, { once: true }); 前端你用事件要保证你自己的世界始终是一个 星峰 发表于 2024-8-1 09:27
//添加一个“播放播放”按钮
var concatenatedString2
// 创建一个 Mutati ...
感谢大佬。成功了{:1_893:} 有什么api可以实现对一个web视频定时截图呢
页:
[1]
2