🏠 Home 

MyJSCodeLibrary

my JavaScript Code Library

此脚本不应直接安装,它是一个供其他脚本使用的外部库。如果您需要使用该库,请在脚本元属性加入:// @require https://update.greasyfork.org/scripts/479598/1311136/MyJSCodeLibrary.js

// ==UserScript==
// @name         我的常用js代码库
// @namespace    http://tampermonkey.net/
// @version      0.64
// @description  我常用的js代码库
// @author       zyb
// @match        *://*/*
// @icon         data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant        none
// ==/UserScript==
class MyJSCodeLibrary {
constructor() {
}
/**
* 创建css样式
* @param {string} styleStr css样式
*/
createStyleFuc(styleStr = "") {
// 创建style节点
const style = document.createElement("style");
style.setAttribute("type", "text/css");
style.appendChild(document.createTextNode(styleStr));
document.head.appendChild(style);
}
/**
* 异步获取dom节点
* @param {string} selector dom节点的选择器文本
* @param {number} time 间隔时间
* @returns
*/
getDomByIntervalAsyncFuc(selector, time = 100) {
let dom = document.querySelectorAll(selector)[0];
let timeId = null;
let times = 0;
return new Promise((res) => {
timeId = setInterval(() => {
times++;
if (dom || times > 10) {
res(dom);
clearInterval(timeId);
} else {
dom = document.querySelectorAll(selector)[0];
}
}, time)
})
}
/**
* 异步获取dom节点
* @param {string} selector dom节点的选择器文本
* @param {number} time 间隔时间
* @returns
*/
getDomListByIntervalAsyncFuc(selector, time = 100) {
let dom = document.querySelectorAll(selector)[0];
let timeId = null;
let times = 0;
return new Promise((res) => {
timeId = setInterval(() => {
times++;
if (dom.length || times > 10) {
res(dom);
clearInterval(timeId);
} else {
dom = document.querySelectorAll(selector);
}
}, time)
})
}
/**
* 异步获取dom节点
* @param {string} selector dom节点的选择器文本
* @param {number} time 间隔时间
* @returns
*/
getDomByTimeoutAsyncFuc(selector = "", time = 2000) {
return new Promise((res) => {
setTimeout(() => {
let dom = document.querySelectorAll(selector)[0];
res(dom);
}, time)
})
}
/**
* 异步获取dom节点
* @param {string} selector dom节点的选择器文本
* @param {number} time 间隔时间
* @returns
*/
getDomListByTimeoutAsyncFuc(selector = "", time = 2000) {
return new Promise((res) => {
setTimeout(() => {
let dom = document.querySelectorAll(selector);
res(dom);
}, time)
})
}
/**
* 针对返回值为html时的解析函数
* @param {Object} obj 请求头参数
*
* {
*      "charset": "gbk",
*      "url": "https://www.88yydstxt426.com/s.php",
*      "headers": {
*          "content-type": "application/x-www-form-urlencoded",
*      },
*      "body": "objectType=2&type=articlename&s=%C3%C3%C3%C3",
*      "method": "POST",
* }
*/
decodeHtmlAsyncFuc(obj = {}) {
const url = obj.url || '';
const headers = obj.headers || obj.header || {
"content-type": "application/x-www-form-urlencoded",
};
const body = obj.body;
const method = obj.method || 'GET';
const charset = obj.charset || 'utf-8';
let domArr = [];
const decoder = new TextDecoder(charset);
return fetch(url, {
headers,
body,
method,
}).then(response => {
const reader = response.body.getReader();
return reader.read().then(function process({ done, value }) {
if (done) {
console.log('Stream finished');
return new Promise((res) => {
res(domArr);
});
}
// 解码数据
const text = decoder.decode(value);
const dom = document.createElement('div');
dom.innerHTML = text;
domArr.push(dom);
return reader.read().then(process);
});
});
}
/**
* 将值复制到剪贴板
* @param {string} value 复制到剪贴板的值
*/
copy(value = '') {
if (!value) {
return
}
navigator.clipboard.writeText(value);
}
/**
* 监听函数,监听传入的对象的第一层字段值的变化
*/
watch(dataObj, fuc) {
const obj = { ...dataObj };
//汇总对象中所有的属性形成一个数组
const keys = Object.keys(dataObj);
//遍历
keys.forEach((k) => {
Object.defineProperty(dataObj, k, {
get() {
return obj[k];
},
set(val) {
console.log(`${k}被修改了,值为`, val);
fuc && fuc();
obj[k] = val;
}
})
})
}
}
if(!window.MyJSCodeLibrary){
window.MyJSCodeLibrary = MyJSCodeLibrary;
}