JavaScript 库函数,以便调用
이 스크립트는 직접 설치하는 용도가 아닙니다. 다른 스크립트에서 메타 지시문 // @require https://update.greasyfork.org/scripts/491971/1356529/libs.js을(를) 사용하여 포함하는 라이브러리입니다.
// ==UserScript==
// @name libs
// @description JavaScript 库函数,以便调用
// @namespace stapling/libs
// @version 0.1
// @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]))
}