Greasy Fork is available in English.
JavaScript 库函数,以便调用
当前为
此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.greasyfork.icu/scripts/491971/1356551/libs.js
// ==UserScript==
// @name libs
// @description JavaScript 库函数,以便调用
// @namespace essence/libs
// @version 0.2
// @grant none
// ==/UserScript==
// 等待
const sleep = ms => new Promise(resolve => setTimeout(resolve, ms))
/**
* 等待指定元素出现后,执行回调
* @param selector 元素选择器。参考`document.querySelector`
* @param callback 需要执行的回调。传递的参数为目标元素
*/
const waitElem = (selector, callback) => {
const observer = new MutationObserver(() => {
const element = document.querySelector(selector)
if (element) {
callback(element)
observer.disconnect()
}
})
observer.observe(document.body, {
childList: true,
subtree: true,
})
}
/**
* 读取网站存储到 localStorage 的所有值
* @param excludeRegexp 不读取的键的正则。如 /^Hm_lvt/
* @return {string} JSON 文本
*/
const readLocalStorageValues = (excludeRegexp = undefined) => {
const result = {}
for (let i = 0; i < localStorage.length; i++) {
const key = localStorage.key(i)
if (excludeRegexp && excludeRegexp.test(key)) {
continue
}
result[key] = localStorage.getItem(key)
}
return JSON.stringify(result)
}
/**
* 恢复数据到网站的 localStorage
* @param {string} json
*/
const restoreLocalStorageValues = (json) => {
const data = JSON.parse(json)
Object.keys(data).forEach(key => localStorage.setItem(key, data[key]))
}
/**
* 让容器以 flex row 显示子元素
* @param elem {HTMLElement} 容器元素
* @param gap {string} 子元素的间隔。默认"8px"
* @param alignItems {string} 子元素垂直对齐。默认"center"
*/
const containerToRow = (elem, gap = "8px", alignItems = "center") => {
elem.style.display = "flex"
elem.style.flexDirection = "row"
elem.style.justifyContent = "space-between"
elem.style.gap = gap
elem.style.alignItems = alignItems
}