// ==UserScript==
// @name 一键复制商品笔记
// @namespace http://tampermonkey.net/
// @version 1.2.6
// @description 快团团/群接龙 笔记图文内容一键复制!适用于Edge浏览器、Chrome浏览器
// @author NK
// @match https://ktt.pinduoduo.com/groups/detail/*
// @match https://pro.qunjielong.com/*
// @grant none
// @require https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js
// @license MIT
// ==/UserScript==
(function() {
'use strict';
const href = window.location.href;
const isKttPage = href.indexOf('https://ktt.pinduoduo.com/groups/detail/') > -1;
const isQjlPage = href.indexOf('https://pro.qunjielong.com/#/seq/seq-detail?actId=') > -1;
/**
* toast
*/
function showToast(msg) {
const ToastNode = $(`<div class="toast-content" style="position: fixed;z-index: 100;top: 0;left: 0;width: 100vw;height: 100vh;display: flex;justify-content: center;align-items: center;color: #fff">
<div class="toast" style="background-color: rgba(36, 36, 37, 0.81);border-radius: 10px;padding: 10px 20px;justify-content: center;align-items: center;">
<span>${msg}</span>
</div>
</div>`);
$('body').before(ToastNode);
// $('body').insertAdjacentHTML('beforeend', ToastNode);
setTimeout(function() {
$('.toast-content').hide();
}, 1500);
}
/**
* 抓取快团团笔记内容
*/
async function pickKttNoteDetail() {
const title = $("div[class^='Header_title'] span[class^='Header_name']").html();
const note = $("div[class^='ImageText_imageText']");
const items = note.children();
const mediaItems = []; // 只抓取图片、文字、视频
for (let i = 0; i < items.length; i++) {
const item = items[i];
if (item.className.indexOf('ImageText_img') > -1) {
const imgNode = item.children && item.children[0];
mediaItems.push({
type: 'image',
value: imgNode.src,
});
}
if (item.tagName === 'PRE') {
const textNode = item.children && item.children[0];
if (textNode && textNode.className.indexOf('ImageText_desc') > -1) {
mediaItems.push({
type: 'text',
value: textNode.innerHTML,
});
}
}
if (item.tagName === 'VIDEO') {
mediaItems.push({
type: 'outerVideo',
value: item.src,
});
}
}
const pasteContent = JSON.stringify([
{
type: 'title',
value: title,
},
...mediaItems,
]);
// 仅仅是复制到剪切板
// 顺序:油猴一键复制后,在笔记工具一键同步生成笔记
navigator.clipboard.writeText(pasteContent);
console.log(pasteContent);
showToast('内容复制成功,请去新建笔记');
}
/**
* 抓取群接龙团详情
* @returns {Promise<void>}
*/
async function pickQjlNoteDetail() {
const title = $('.content-main section')[0]?.querySelector('.ng-star-inserted>.pre-line')?.textContent;
const note = $('.ant-card-body section')[2];
const items = note.children;
const mediaItems = []; // 只抓取图片、文字、视频
for (let i = 0; i < items.length; i++) {
const item = items[i]?.children;
// 做下代码保护
if (!item || !item[0]) {
continue;
}
// 大图
if (item[0].className.indexOf('good-big-img') > -1) {
mediaItems.push({
type: 'image',
value: item[0].src,
imgType: 'big',
});
}
// 小图
if (item[0].className.indexOf('good-small-box') > -1) {
const imagesNode = Array.from(item[0].children);
imagesNode.forEach(img => {
mediaItems.push({
type: 'image',
value: img.src,
imgType: 'small',
});
})
}
// 文本
if (item[0].className.indexOf('pre-line') > -1) {
const textNode = item[0];
mediaItems.push({
type: 'text',
value: textNode.textContent,
});
}
// 视频
if (item[0].className.indexOf('video-box') > -1) {
const videoNode = item[0].children[0];
mediaItems.push({
type: 'outerVideo',
value: videoNode.src,
});
}
}
const pasteContent = JSON.stringify([
{
type: 'title',
value: title,
},
...mediaItems,
]);
// 仅仅是复制到剪切板
// 顺序:油猴一键复制后,在笔记后台点击复制笔记
navigator.clipboard.writeText(pasteContent);
console.log(pasteContent);
showToast('复制成功');
}
/**
* 返回「复制笔记内容」按钮
* 用于复制笔记内容
* @returns {*|jQuery|HTMLElement}
*/
function renderNoteCopyBtn() {
const $btn = $('<a id="btn_copy_note">一键复制</a>');
let btnCss = null;
$btn.hover(
function() {
$(this).css({
'background-color': '#ff6f38',
border: '1px solid #ff6f38',
});
},
function() {
$(this).css({
'background-color': '#FF4700',
border: '1px solid #FF4700',
});
},
);
if (isKttPage) {
btnCss = {
display: 'flex',
height: '24px',
position: 'absolute',
top: '10px',
right: '350px',
padding: '4px 20px',
color: '#fff',
cursor: 'pointer',
border: '1px solid #FF4700',
'z-index': 999,
'align-items': 'center',
'margin-right': '10px',
'border-radius': '4px',
'background-color': '#FF4700',
};
// 点击事件
$btn.click(pickKttNoteDetail);
}
if (isQjlPage) {
btnCss = {
display: 'flex',
height: '32px',
position: 'absolute',
top: '16px',
right: '180px',
padding: '4px 20px',
color: '#fff',
cursor: 'pointer',
border: '1px solid #FF4700',
'z-index': 999,
'align-items': 'center',
'margin-right': '10px',
'border-radius': '4px',
'background-color': '#FF4700',
};
// 点击事件
$btn.click(pickQjlNoteDetail);
}
$btn.css(btnCss);
return $btn;
}
/**
* 添加
*/
function initUI() {
// 快团团
if (isKttPage) {
const noteCopyBtn = renderNoteCopyBtn();
$('body').before(noteCopyBtn);
}
// 群接龙
if (isQjlPage) {
const noteCopyBtn = renderNoteCopyBtn();
$('body').before(noteCopyBtn);
}
}
/**
* 检查下DOM节点是否已经挂载
* @returns {boolean}
*/
let count = 0;
function checkDomIsReady() {
count++; // 做个兜底,避免无限调用
let dom = null;
if (isKttPage) {
dom = $("div[class^='ImageText_imageText']");
}
if (isQjlPage) {
dom = $('#rich-text .ant-card-body .ng-star-inserted');
}
if (dom?.length || count > 100) {
clearInterval(interval);
interval = null;
initUI();
}
}
// 初始化
let interval = setInterval(checkDomIsReady, 100);
})();