🏠 Home 

Pixiv 一键收藏

Pixiv 一键收藏,避免烦人的页面跳转


安装此脚本?
// ==UserScript==
// @name              Pixiv quick fav
// @name:zh-CN        Pixiv 一键收藏
// @namespace         https://twitter.com/ikenaikoto
// @version           1.6
// @description       One-click fav on Pixiv
// @description:zh-cn Pixiv 一键收藏,避免烦人的页面跳转
// @author            fireattack
// @match             *://www.pixiv.net/member_illust.php?mode=medium&illust_id=*
// ==/UserScript==
function urlencodeFormData(fd) { //From: https://stackoverflow.com/questions/7542586/new-formdata-application-x-www-form-urlencoded
var s = '';
function encode(s) {
return encodeURIComponent(s).replace(/%20/g, '+');
}
for (var pair of fd.entries()) {
if (typeof pair[1] == 'string') {
s += (s ? '&' : '') + encode(pair[0]) + '=' + encode(pair[1]);
}
}
return s;
}
var target = document.querySelector('body');
// create an observer instance
var observer = new MutationObserver(function (mutations, ob) {
mutations.forEach(function (mutation) {
var favBtn = document.querySelector('a[href*="/bookmark_add.php"]');
if (favBtn && favBtn.querySelectorAll('path')) {
main(favBtn);
//ob.disconnect();
}
});
});
// configuration of the observer:
var config = {
attributes: true,
childList: true,
characterData: true,
subtree: true
};
// pass in the target node, as well as the observer options
observer.observe(target, config);
function gradientColorChange(favBtn) {
var i = 255;
var j = -10;
return setInterval(() => {
favBtn.querySelectorAll('path')[1].style.fill = `rgb(${i}, 64, 96`;
i = i + j;
if (i < 0) {
i = -i;
j = -j;
};
if (i > 255) {
i = 255 - (i - 255);
j = -j;
}
}, 30);
}
function main(favBtn) {
favBtn.onclick = (event) => {
var color = window.getComputedStyle(favBtn.querySelectorAll('path')[0]).fill;
if (color != "rgb(255, 64, 96)") {
var data = new FormData();
data.append('mode', 'save_illust_bookmark');
data.append('illust_id', window.location.href.match(/id=(\d+)/)[1]);
data.append('restrict', '0');
data.append('comment', '');
data.append('tags', '');
data.append('tt', globalInitData.token);
data = urlencodeFormData(data);
var xhr = new XMLHttpRequest();
xhr.open('POST', '/rpc/index.php', true);
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded; charset=UTF-8');
xhr.onload = () => {
var jsonResponse = JSON.parse(xhr.responseText);
if (jsonResponse.error) {
console.log('Bookmark error!');
} else {
clearInterval(t);
favBtn.querySelectorAll('path')[0].style.fill = 'rgb(255, 64, 96)';
favBtn.querySelectorAll('path')[1].style.fill = 'rgb(255, 64, 96)';
}
};
xhr.send(data);
t = gradientColorChange(favBtn);
event.preventDefault();
}
}
}