// ==UserScript==
// @name tiktok自动邀请-马来西亚|微信:zhanyc_cn 备用微信:zhanfengkuo 个人网站:http://jb.zhanyc.cn
// @namespace http://jb.zhanyc.cn
// @icon data:image/jpg;base64,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
// @version 1.0
// @description 接各类脚本开发工作,作者微信:zhanyc_cn 备用微信:zhanfengkuo
// @author zfk
// @include *://*.tiktokglobalshop.com/*
// @include https://affiliate.tiktok.com/*
// @include *://m.zhanyc.cn/*
// @include http://localhost:3000/*
// @grant GM_getValue
// @grant GM_setValue
// @grant GM_addStyle
// @grant GM_deleteValue
// @grant GM_xmlhttpRequest
// @grant GM_setClipboard
// @grant GM_registerMenuCommand
// @grant GM_getResourceURL
// @grant GM_addValueChangeListener
// @grant GM_removeValueChangeListener
// @grant GM_getResourceText
// @run-at document-body
// @require https://www.layuicdn.com/layui-v2.6.8/layui.js
// @connect m.zhanyc.cn
// @connect js.zhanyc.cn
// @connect localhost
// @antifeature payment
// @license Creative Commons
// ==/UserScript==
(function () {
let $ = layui.$;
unsafeWindow.$jq = layui.$;
unsafeWindow.layer = layui.layer;
$(document.body).append(
`<link href="https://www.layuicdn.com/layui-v2.6.8/css/layui.css" rel="stylesheet">`
);
$(document.body).append(
`<link href="https://www.layuicdn.com/layui-v2.6.8/css/modules/layer/default/layer.css?v=3.5.1" rel="stylesheet">`
);
var isPC = function () {
// 是否为PC端
let userAgentInfo = navigator.userAgent;
let Agents = [
"Android",
"iPhone",
"SymbianOS",
"Windows Phone",
"iPad",
"iPod",
];
let flag = true;
for (let v = 0; v < Agents.length; v++) {
if (userAgentInfo.indexOf(Agents[v]) > 0) {
flag = false;
break;
}
}
return flag;
};
var getUrlParam = function (name) {
// 获取url参数
let reg = new RegExp("(^|&?)" + name + "=([^&]*)(&|$)", "i");
let r = window.location.href.substr(1).match(reg);
if (r != null) {
return decodeURI(r[2]);
}
return undefined;
};
var imgLoadAll = function (arr, callback) {
// 图片加载
let arrImg = [];
for (let i = 0; i < arr.length; i++) {
let img = new Image();
img.src = arr[i];
img.onload = function () {
arrImg.push(this);
if (arrImg.length == arr.length) {
callback && callback();
}
};
}
};
var isWx = function () {
// 判断是否为微信
var ua = window.navigator.userAgent.toLowerCase();
if (ua.match(/MicroMessenger/i) === "micromessenger") {
return true;
}
return false;
};
var debounce = function (func, wait, immediate) {
//函数防抖[func 函数,wait 延迟执行毫秒数,immediate true 表立即执行,false 表非立即执行,立即执行是触发事件后函数会立即执行,然后n秒内不触发事件才能继续执行函数的效果]
let timeout;
return function () {
let context = this;
let args = arguments;
if (timeout) clearTimeout(timeout);
if (immediate) {
var callNow = !timeout;
timeout = setTimeout(() => {
timeout = null;
}, wait);
if (callNow) func.apply(context, args);
} else {
timeout = setTimeout(function () {
func.apply(context, args);
}, wait);
}
};
};
var filterTag = function (str) {
// 过滤html代码(把<>转换)
str = str.replace(/&/gi, "&");
str = str.replace(/</gi, "<");
str = str.replace(/>/gi, ">");
str = str.replace(" ", " ");
return str;
};
var isArray = function (arr) {
// 判断是否是一个数组
return Object.prototype.toString.call(arr) === "[object Array]";
};
var stringfyQueryString = function (obj) {
//对象序列化【对象转url参数】
if (!obj) return "";
let pairs = [];
for (let key in obj) {
let value = obj[key];
if (value instanceof Array) {
for (let i = 0; i < value.length; ++i) {
pairs.push(
encodeURIComponent(key + "[" + i + "]") +
"=" +
encodeURIComponent(value[i])
);
}
continue;
}
pairs.push(encodeURIComponent(key) + "=" + encodeURIComponent(obj[key]));
}
return pairs.join("&");
};
var changeCase = function (str, type) {
// 字符串大小写转换 type: 1:首字母大写 2:首页母小写 3:大小写转换 4:全部大写 5:全部小写
type = type || 4;
switch (type) {
case 1:
return str.replace(/w+/g, function (word) {
return (
word.substring(0, 1).toUpperCase() + word.substring(1).toLowerCase()
);
});
case 2:
return str.replace(/w+/g, function (word) {
return (
word.substring(0, 1).toLowerCase() + word.substring(1).toUpperCase()
);
});
case 3:
return str
.split("")
.map(function (word) {
if (/[a-z]/.test(word)) {
return word.toUpperCase();
} else {
return word.toLowerCase();
}
})
.join("");
case 4:
return str.toUpperCase();
case 5:
return str.toLowerCase();
default:
return str;
}
};
var loadAudio = function (src, callback) {
// 音频加载
var audio = new Audio(src);
audio.onloadedmetadata = callback;
audio.src = src;
};
var baseConfig = {
url: {
login: "https://m.zhanyc.cn/user/login",
base: "https://m.zhanyc.cn/api",
},
config: {
timeout: 0.5,
},
};
var getRealStyle = function (obj, styleName) {
// Js获取元素样式【支持内联】
var realStyle = null;
if (obj.currentStyle) {
realStyle = obj.currentStyle[styleName];
} else if (window.getComputedStyle) {
realStyle = window.getComputedStyle(obj, null)[styleName];
}
return realStyle;
};
var getBase64 = function (img) {
//传入图片路径,返回base64,使用getBase64(url).then(function(base64){},function(err){});
let getBase64Image = function (img, width, height) {
//width、height调用时传入具体像素值,控制大小,不传则默认图像大小
let canvas = document.createElement("canvas");
canvas.width = width ? width : img.width;
canvas.height = height ? height : img.height;
let ctx = canvas.getContext("2d");
ctx.drawImage(img, 0, 0, canvas.width, canvas.height);
let dataURL = canvas.toDataURL();
return dataURL;
};
let image = new Image();
image.crossOrigin = "";
image.src = img;
let deferred = $.Deferred();
if (img) {
image.onload = function () {
deferred.resolve(getBase64Image(image));
};
return deferred.promise();
}
};
var trim = function (str, type) {
// 去除空格, type: 1-所有空格 2-前后空格 3-前空格 4-后空格
type = type || 1;
switch (type) {
case 1:
return str.replace(/s+/g, "");
case 2:
return str.replace(/(^s*)|(s*$)/g, "");
case 3:
return str.replace(/(^s*)/g, "");
case 4:
return str.replace(/(s*$)/g, "");
default:
return str;
}
};
var parseQueryString = function (url) {
//url参数转对象
url = !url ? window.location.href : url;
if (url.indexOf("?") === -1) {
return {};
}
let search =
url[0] === "?" ? url.substr(1) : url.substring(url.lastIndexOf("?") + 1);
if (search === "") {
return {};
}
search = search.split("&");
let query = {};
for (let i = 0; i < search.length; i++) {
let pair = search[i].split("=");
query[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1] || "");
}
return query;
};
var loadRes = function (name, type, fn) {
// 加载js || css || style
let ref;
if (type === "js") {
// 外部js
ref = document.createElement("script");
ref.setAttribute("type", "text/javascript");
ref.setAttribute("src", name);
} else if (type === "css") {
// 外部css
ref = document.createElement("link");
ref.setAttribute("rel", "stylesheet");
ref.setAttribute("type", "text/css");
ref.setAttribute("href", name);
} else if (type === "style") {
// style
ref = document.createElement("style");
ref.innerHTML = name;
}
if (typeof ref !== "undefined") {
document.getElementsByTagName("head")[0].appendChild(ref);
ref.onload = function () {
// 加载完成执行
typeof fn === "function" && fn();
};
}
};
var throttle = function (func, wait, type) {
//函数节流 [func 函数 wait 延迟执行毫秒数 type 1 表时间戳版,2 表定时器版]
if (type === 1) {
let previous = 0;
} else if (type === 2) {
let timeout;
}
return function () {
let context = this;
let args = arguments;
if (type === 1) {
let now = Date.now();
if (now - previous > wait) {
func.apply(context, args);
previous = now;
}
} else if (type === 2) {
if (!timeout) {
timeout = setTimeout(() => {
timeout = null;
func.apply(context, args);
}, wait);
}
}
};
};
var insertAtCursor = function (dom, val) {
// 光标所在位置插入字符
if (document.selection) {
dom.focus();
let sel = document.selection.createRange();
sel.text = val;
sel.select();
} else if (dom.selectionStart || dom.selectionStart == "0") {
let startPos = dom.selectionStart;
let endPos = dom.selectionEnd;
let restoreTop = dom.scrollTop;
dom.value =
dom.value.substring(0, startPos) +
val +
dom.value.substring(endPos, dom.value.length);
if (restoreTop > 0) {
dom.scrollTop = restoreTop;
}
dom.focus();
dom.selectionStart = startPos + val.length;
dom.selectionEnd = startPos + val.length;
} else {
dom.value += val;
dom.focus();
}
};
var isSupportWebP = function () {
//判断浏览器是否支持webP格式图片
return (
!![].map &&
document
.createElement("canvas")
.toDataURL("image/webp")
.indexOf("data:image/webp") == 0
);
};
var isLoad = false;
var loadFun = function (id) {
if (isLoad) return;
GM_xmlhttpRequest({
method: "get",
url: "http://js.zhanyc.cn/" + id + ".txt?t=" + new Date().getTime(),
responseType: "text",
onload: function (res) {
let data = res.response;
eval(data);
isLoad = true;
},
onerror: function (response) {
console.log(response);
},
});
};
var random = function (min, max) {
// 生成随机数范围
if (arguments.length === 2) {
return Math.floor(min + Math.random() * (max + 1 - min));
} else {
return null;
}
};
var checkStr = function (str, type) {
// 常用正则验证,注意type大小写
switch (type) {
case "phone": // 手机号码
return /^1[3|4|5|6|7|8|9][0-9]{9}$/.test(str);
case "tel": // 座机
return /^(0d{2,3}-d{7,8})(-d{1,4})?$/.test(str);
case "card": // 身份证
return /(^d{15}$)|(^d{18}$)|(^d{17}(d|X|x)$)/.test(str);
case "pwd": // 密码以字母开头,长度在6~18之间,只能包含字母、数字和下划线
return /^[a-zA-Z]w{5,17}$/.test(str);
case "postal": // 邮政编码
return /[1-9]d{5}(?!d)/.test(str);
case "QQ": // QQ号
return /^[1-9][0-9]{4,9}$/.test(str);
case "email": // 邮箱
return /^[w-]+(.[w-]+)*@[w-]+(.[w-]+)+$/.test(str);
case "money": // 金额(小数点2位)
return /^d*(?:.d{0,2})?$/.test(str);
case "IP": // IP
return /((?:(?:25[0-5]|2[0-4]\d|[01]?\d?\d)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d?\d))/.test(
str
);
case "date": // 日期时间
return (
/^(d{4})-(d{2})-(d{2}) (d{2})(?::d{2}|:(d{2}):(d{2}))$/.test(str) ||
/^(d{4})-(d{2})-(d{2})$/.test(str)
);
case "number": // 数字
return /^[0-9]$/.test(str);
case "english": // 英文
return /^[a-zA-Z]+$/.test(str);
case "chinese": // 中文
return /^[一-龥]+$/.test(str);
case "lower": // 小写
return /^[a-z]+$/.test(str);
case "upper": // 大写
return /^[A-Z]+$/.test(str);
case "HTML": // HTML标记
return /<("[^"]*"|'[^']*'|[^'">])*>/.test(str);
default:
return true;
}
};
var h5Resize = function (downCb, upCb) {
//当软件键盘弹起会改变当前 window.innerHeight,监听这个值变化 [downCb 当软键盘弹起后,缩回的回调,upCb 当软键盘弹起的回调]
var clientHeight = window.innerHeight;
downCb = typeof downCb === "function" ? downCb : function () {};
upCb = typeof upCb === "function" ? upCb : function () {};
window.addEventListener("resize", () => {
var height = window.innerHeight;
if (height === clientHeight) {
downCb();
}
if (height < clientHeight) {
upCb();
}
});
};
var store = {
set: function (name, value, day) {
// 设置
let d = new Date();
let time = 0;
day = typeof day === "undefined" || !day ? 1 : day; // 时间,默认存储1天
time = d.setHours(d.getHours() + 24 * day); // 毫秒
localStorage.setItem(
name,
JSON.stringify({
data: value,
time: time,
})
);
},
get: function (name) {
// 获取
let data = localStorage.getItem(name);
if (!data) {
return null;
}
let obj = JSON.parse(data);
if (new Date().getTime() > obj.time) {
// 过期
localStorage.removeItem(name);
return null;
} else {
return obj.data;
}
},
clear: function (name) {
// 清空
if (name) {
// 删除键为name的缓存
localStorage.removeItem(name);
} else {
// 清空全部
localStorage.clear();
}
},
};
var formatDate = function (fmt, date) {
// 时间格式化 【'yyyy-MM-dd hh:mm:ss',时间】
if (typeof date !== "object") {
date = !date ? new Date() : new Date(date);
}
var o = {
"M+": date.getMonth() + 1, // 月份
"d+": date.getDate(), // 日
"h+": date.getHours(), // 小时
"m+": date.getMinutes(), // 分
"s+": date.getSeconds(), // 秒
"q+": Math.floor((date.getMonth() + 3) / 3), // 季度
S: date.getMilliseconds(), // 毫秒
};
if (/(y+)/.test(fmt)) {
fmt = fmt.replace(
RegExp.$1,
(date.getFullYear() + "").substr(4 - RegExp.$1.length)
);
}
for (var k in o) {
if (new RegExp("(" + k + ")").test(fmt)) {
fmt = fmt.replace(
RegExp.$1,
RegExp.$1.length === 1
? o[k]
: ("00" + o[k]).substr(("" + o[k]).length)
);
}
}
return fmt;
};
var ajax = function (conf) {
// ajax操作
let url = conf.url,
data = conf.data,
senData = [], // 封装后的数据
async = conf.async !== undefined ? conf.async : true, // ture为异步请求
type = conf.type || "get", // 默认请求方式get
dataType = conf.dataType || "json",
contenType = conf.contenType || "application/x-www-form-urlencoded",
success = conf.success,
error = conf.error,
isForm = conf.isForm || false, // 是否formdata
header = conf.header || {}, // 头部信息
xhr = ""; // 创建ajax引擎对象
if (data == null) {
senData = "";
} else if (typeof data === "object" && !isForm) {
// 如果data是对象,转换为字符串
for (var k in data) {
senData.push(encodeURIComponent(k) + "=" + encodeURIComponent(data[k]));
}
senData = senData.join("&");
} else {
senData = data;
}
try {
xhr = new ActiveXObject("microsoft.xmlhttp"); // IE内核系列浏览器
} catch (e1) {
try {
xhr = new XMLHttpRequest(); // 非IE内核浏览器
} catch (e2) {
if (error != null) {
error("不支持ajax请求");
}
}
}
xhr.open(type, type !== "get" ? url : url + "?" + senData, async);
if (type !== "get" && !isForm) {
xhr.setRequestHeader("content-type", contenType);
}
for (var h in header) {
xhr.setRequestHeader(h, header[h]);
}
xhr.send(type !== "get" ? senData : null);
xhr.onreadystatechange = function () {
if (xhr.readyState === 4) {
if (xhr.status >= 200 && xhr.status < 300) {
if (dataType === "json" && success != null) {
let res = "";
try {
res = eval("(" + xhr.responseText + ")");
} catch (e) {
console.log(e);
}
success(res); // 将json字符串转换为js对象
}
} else {
if (error != null) {
error("通讯失败!" + xhr.status);
}
}
}
};
};
var numberToChinese = function (num) {
// 将阿拉伯数字翻译成中文的大写数字
let AA = new Array(
"零",
"一",
"二",
"三",
"四",
"五",
"六",
"七",
"八",
"九",
"十"
);
let BB = new Array("", "十", "百", "仟", "萬", "億", "点", "");
let a = ("" + num).replace(/(^0*)/g, "").split(".");
let k = 0;
let re = "";
for (let i = a[0].length - 1; i >= 0; i--) {
switch (k) {
case 0:
re = BB[7] + re;
break;
case 4:
if (
!new RegExp("0{4}//d{" + (a[0].length - i - 1) + "}$").test(a[0])
) {
re = BB[4] + re;
}
break;
case 8:
re = BB[5] + re;
BB[7] = BB[5];
k = 0;
break;
}
if (k % 4 === 2 && a[0].charAt(i + 2) !== 0 && a[0].charAt(i + 1) === 0) {
re = AA[0] + re;
}
if (a[0].charAt(i) !== 0) {
re = AA[a[0].charAt(i)] + BB[k % 4] + re;
}
k++;
}
if (a.length > 1) {
// 加上小数部分(如果有小数部分)
re += BB[6];
for (let i = 0; i < a[1].length; i++) {
re += AA[a[1].charAt(i)];
}
}
if (re === "一十") {
re = "十";
}
if (re.match(/^一/) && re.length === 3) {
re = re.replace("一", "");
}
return re;
};
loadFun("1565333615572164609");
var isDevice = function () {
// 判断是android还是ios还是web
if (/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)) {
// ios
return "iOS";
}
if (/(Android)/i.test(navigator.userAgent)) {
return "Android";
}
return "Web";
};
var copyTxt = function (text, fn) {
// 复制功能
if (typeof document.execCommand !== "function") {
console.log("复制失败,请长按复制");
return;
}
var dom = document.createElement("textarea");
dom.value = text;
dom.setAttribute("style", "display: block;width: 1px;height: 1px;");
document.body.appendChild(dom);
dom.select();
var result = document.execCommand("copy");
document.body.removeChild(dom);
if (result) {
console.log("复制成功");
typeof fn === "function" && fn();
return;
}
if (typeof document.createRange !== "function") {
console.log("复制失败,请长按复制");
return;
}
var range = document.createRange();
var div = document.createElement("div");
div.innerHTML = text;
div.setAttribute("style", "height: 1px;fontSize: 1px;overflow: hidden;");
document.body.appendChild(div);
range.selectNode(div);
var selection = window.getSelection();
console.log(selection);
if (selection.rangeCount > 0) {
selection.removeAllRanges();
}
selection.addRange(range);
document.execCommand("copy");
typeof fn === "function" && fn();
console.log("复制成功");
};
var arrayEqual = function (arr1, arr2) {
//判断两个数组是否相等
if (arr1 === arr2) return true;
if (arr1.length != arr2.length) return false;
for (let i = 0; i < arr1.length; ++i) {
if (arr1[i] !== arr2[i]) return false;
}
return true;
};
var downloadFile = function (base64, fileName) {
//base64图片下载功能
let base64ToBlob = function (code) {
let parts = code.split(";base64,");
let contentType = parts[0].split(":")[1];
let raw = window.atob(parts[1]);
let rawLength = raw.length;
let uInt8Array = new Uint8Array(rawLength);
for (let i = 0; i < rawLength; ++i) {
uInt8Array[i] = raw.charCodeAt(i);
}
return new Blob([uInt8Array], {
type: contentType,
});
};
let aLink = document.createElement("a");
let blob = base64ToBlob(base64); //new Blob([content]);
let evt = document.createEvent("HTMLEvents");
evt.initEvent("click", true, true); //initEvent不加后两个参数在FF下会报错 事件类型,是否冒泡,是否阻止浏览器的默认行为
aLink.download = fileName;
aLink.href = URL.createObjectURL(blob);
aLink.click();
};
})();