- // ==UserScript==
- // @name 知乎取消关注
- // @namespace https://gf.qytechs.cn/users/831154
- // @version 1.0.2
- // @author percy
- // @description 知乎快速取消关注
- // @match *://www.zhihu.com/people/*/following*
- // @match https://www.zhihu.com/question/following
- // @icon https://static.zhihu.com/heifetz/favicon.ico
- // @grant GM_xmlhttpRequest
- // @grant GM_registerMenuCommand
- // @grant GM_unregisterMenuCommand
- // @grant GM_openInTab
- // @grant GM_getValue
- // @grant GM_setValue
- // @grant GM_notification
- // @grant GM_info
- // @grant window.onurlchange
- // @license GPL-3.0 License
- // @run-at document-end
- // ==/UserScript==
-
- 'use strict';
- let menu_ALL = [
- ['unfollow_members', '取消关注人', '取消关注人', true],
- ['unfollow_columns', '取消关注专栏', '取消关注专栏', true],
- ['unfollow_topics', '取消关注话题', '取消关注话题', true],
- ['unfollow_questions', '取消关注问题', '取消关注问题', true]
- ];
- let menu_ID = [];
- for (let i = 0; i < menu_ALL.length; i++) { // 如果读取到的值为 null 就写入默认值
- if (GM_getValue(menu_ALL[i][0]) == null) {
- GM_setValue(menu_ALL[i][0], menu_ALL[i][3])
- }
- ;
- }
- registerMenuCommand();
-
- // 注册(不可用)脚本菜单
- function registerMenuCommand() {
- if (menu_ID.length > menu_ALL.length) { // 如果菜单ID数组多于菜单数组,说明不是首次添加菜单,需要卸载所有脚本菜单
- for (let i = 0; i < menu_ID.length; i++) {
- GM_unregisterMenuCommand(menu_ID[i]);
- }
- }
- for (let i = 0; i < menu_ALL.length; i++) { // 循环注册(不可用)脚本菜单
- menu_ALL[i][3] = GM_getValue(menu_ALL[i][0]);
- if (menu_ALL[i][0] === 'menu_customBlockUsers') {
- if (menu_value('menu_blockUsers')) menu_ID[i] = GM_registerMenuCommand(`#️⃣ ${menu_ALL[i][1]}`, function () {
- customBlockUsers()
- });
- } else if (menu_ALL[i][0] === 'menu_customBlockKeywords') {
- if (menu_value('menu_blockKeywords')) menu_ID[i] = GM_registerMenuCommand(`#️⃣ ${menu_ALL[i][1]}`, function () {
- customBlockKeywords()
- });
- } else if (menu_ALL[i][0] === 'menu_blockType') {
- menu_ID[i] = GM_registerMenuCommand(`#️⃣ ${menu_ALL[i][1]}`, function () {
- menu_setting('checkbox', menu_ALL[i][1], menu_ALL[i][2], true, [menu_ALL[i + 1], menu_ALL[i + 2], menu_ALL[i + 3], menu_ALL[i + 4], menu_ALL[i + 5]])
- });
- } else if (menu_ALL[i][0] != 'menu_blockTypeVideo' && menu_ALL[i][0] != 'menu_blockTypeArticle' && menu_ALL[i][0] != 'menu_blockTypeTopic' && menu_ALL[i][0] != 'menu_blockTypeSearch' && menu_ALL[i][0] != 'menu_blockYanXuan') {
- menu_ID[i] = GM_registerMenuCommand(`${menu_ALL[i][3] ? '✅' : '❌'} ${menu_ALL[i][1]}`, function () {
- menu_switch(`${menu_ALL[i][3]}`, `${menu_ALL[i][0]}`, `${menu_ALL[i][2]}`)
- });
- }
- }
- menu_ID[menu_ID.length] = GM_registerMenuCommand('💬 反馈 & 建议', function () {
- window.GM_openInTab('https://gf.qytechs.cn/zh-CN/scripts/457969/feedback', {
- active: true,
- insert: true,
- setParent: true
- });
- window.GM_openInTab('https://gf.qytechs.cn/zh-CN/scripts/457969/feedback', {
- active: true,
- insert: true,
- setParent: true
- });
- });
- }
-
- // 菜单开关
- function menu_switch(menu_status, Name, Tips) {
- if (menu_status == 'true') {
- GM_setValue(`${Name}`, false);
- GM_notification({
- text: `已关闭 [${Tips}] 功能\n(点击刷新网页后生效)`, timeout: 3500, onclick: function () {
- location.reload();
- }
- });
- } else {
- GM_setValue(`${Name}`, true);
- GM_notification({
- text: `已开启 [${Tips}] 功能\n(点击刷新网页后生效)`, timeout: 3500, onclick: function () {
- location.reload();
- }
- });
- }
- registerMenuCommand(); // 重新注册(不可用)脚本菜单
- };
-
- // 返回菜单值
- function menu_value(menuName) {
- for (let menu of menu_ALL) {
- if (menu[0] == menuName) {
- return menu[3]
- }
- }
- }
-
- // 脚本设置
- function menu_setting(type, title, tips, line, menu) {
- let _br = '', _html = `<style class="zhihuE_SettingStyle">.zhihuE_SettingRoot {position: absolute;top: 50%;left: 50%;-webkit-transform: translate(-50%, -50%);-moz-transform: translate(-50%, -50%);-ms-transform: translate(-50%, -50%);-o-transform: translate(-50%, -50%);transform: translate(-50%, -50%);width: auto;min-width: 400px;max-width: 600px;height: auto;min-height: 150px;max-height: 400px;color: #535353;background-color: #fff;border-radius: 3px;}
- .zhihuE_SettingBackdrop_1 {position: fixed;top: 0;right: 0;bottom: 0;left: 0;z-index: 203;display: -webkit-box;display: -ms-flexbox;display: flex;-webkit-box-orient: vertical;-webkit-box-direction: normal;-ms-flex-direction: column;flex-direction: column;-webkit-box-pack: center;-ms-flex-pack: center;justify-content: center;overflow-x: hidden;overflow-y: auto;-webkit-transition: opacity .3s ease-out;transition: opacity .3s ease-out;}
- .zhihuE_SettingBackdrop_2 {position: absolute;top: 0;right: 0;bottom: 0;left: 0;z-index: 0;background-color: rgba(18,18,18,.65);-webkit-transition: background-color .3s ease-out;transition: background-color .3s ease-out;}
- .zhihuE_SettingRoot .zhihuE_SettingHeader {padding: 10px 20px;color: #fff;font-weight: bold;background-color: #3994ff;border-radius: 3px 3px 0 0;}
- .zhihuE_SettingRoot .zhihuE_SettingMain {padding: 10px 20px;border-radius: 0 0 3px 3px;}
- .zhihuE_SettingHeader span {float: right;cursor: pointer;}
- .zhihuE_SettingMain input {margin: 10px 6px 10px 0;cursor: pointer;vertical-align:middle}
- .zhihuE_SettingMain label {margin-right: 20px;user-select: none;cursor: pointer;vertical-align:middle}
- .zhihuE_SettingMain hr {border: 0.5px solid #f4f4f4;}
- [data-theme="dark"] .zhihuE_SettingRoot {color: #adbac7;background-color: #343A44;}
- [data-theme="dark"] .zhihuE_SettingHeader {color: #d0d0d0;background-color: #2D333B;}
- [data-theme="dark"] .zhihuE_SettingMain hr {border: 0.5px solid #2d333b;}</style>
- <div class="zhihuE_SettingBackdrop_1"><div class="zhihuE_SettingBackdrop_2"></div><div class="zhihuE_SettingRoot">
- <div class="zhihuE_SettingHeader">${title}<span class="zhihuE_SettingClose" title="点击关闭"><svg class="Zi Zi--Close Modal-closeIcon" fill="currentColor" viewBox="0 0 24 24" width="24" height="24"><path d="M13.486 12l5.208-5.207a1.048 1.048 0 0 0-.006-1.483 1.046 1.046 0 0 0-1.482-.005L12 10.514 6.793 5.305a1.048 1.048 0 0 0-1.483.005 1.046 1.046 0 0 0-.005 1.483L10.514 12l-5.208 5.207a1.048 1.048 0 0 0 .006 1.483 1.046 1.046 0 0 0 1.482.005L12 13.486l5.207 5.208a1.048 1.048 0 0 0 1.483-.006 1.046 1.046 0 0 0 .005-1.482L13.486 12z" fill-rule="evenodd"></path></svg></span></div>
- <div class="zhihuE_SettingMain"><p>${tips}</p><hr>`
- if (line) _br = '<br>'
- for (let i = 0; i < menu.length; i++) {
- if (GM_getValue(menu[i][0])) {
- _html += `<label><input name="zhihuE_Setting" type="checkbox" value="${menu[i][0]}" checked="checked">${menu[i][1]}</label>${_br}`
- } else {
- _html += `<label><input name="zhihuE_Setting" type="checkbox" value="${menu[i][0]}">${menu[i][1]}</label>${_br}`
- }
- }
- _html += `</div></div></div>`
- document.body.insertAdjacentHTML('beforeend', _html); // 插入网页末尾
- setTimeout(function () { // 延迟 100 毫秒,避免太快
- // 关闭按钮 点击事件
- document.querySelector('.zhihuE_SettingClose').onclick = function () {
- this.parentElement.parentElement.parentElement.remove();
- document.querySelector('.zhihuE_SettingStyle').remove();
- }
- // 点击周围空白处 = 点击关闭按钮
- document.querySelector('.zhihuE_SettingBackdrop_2').onclick = function (event) {
- if (event.target == this) {
- document.querySelector('.zhihuE_SettingClose').click();
- }
- ;
- }
- // 复选框 点击事件
- document.getElementsByName('zhihuE_Setting').forEach(function (checkBox) {
- checkBox.addEventListener('click', function () {
- if (this.checked) {
- GM_setValue(this.value, true);
- } else {
- GM_setValue(this.value, false);
- }
- });
- })
- }, 100)
- }
-
- //sleep
- function sleep(time) {
- return new Promise((resolve) => setTimeout(resolve, time));
- }
-
- //取消关注的人
- async function unfollow_members() {
- if (!menu_value('unfollow_members')) return;
- //users
- let elements = document.querySelectorAll('.ContentItem .ContentItem-main');
- for (let e of elements) {
- try {
- let user = e.querySelector('.ContentItem-image .UserLink-link');
- let userUrl = user.getAttribute("href");
- let userId = userUrl.substring(userUrl.lastIndexOf('/') + 1);
- let userName = user.querySelector('img').getAttribute('alt');
- console.log("user:%s,id:%s,http:%s", userName, userId, userUrl);
-
- let result = await createDialogue("取消关注的人", userName);
- if (result === -1) {
- // 关闭
- return;
- } else if (result === 0) {
- // 取消
- continue;
- } else if (result === 2) {
- // 查看
- window.open(userUrl);
- continue;
- }
-
- let button = e.querySelector('.ContentItem-extra button');
- if (button.innerText === '已关注') {
- button.click();
- await sleep(20);
- }
- } catch (e) {
- debugger
- console.error('parse user err:', e);
- }
- }
- }
-
- // 取消关注的话题
- async function unfollow_topics() {
- if (!menu_value('unfollow_topics')) return;
- // topics
- let topics = document.querySelectorAll('.TopicLink');
- for (let topic of topics) {
- try {
- let topicUrl = topic.getAttribute('href');
- let topicId = topicUrl.substring(topicUrl.lastIndexOf('/') + 1);
- let topicText = topic.children[0].innerText;
- console.log("topic:%s,id:%s,http:%s", topicText, topicId, topicUrl);
-
- let result = await createDialogue("取消关注话题", topicText);
- if (result === -1) {
- // 关闭
- return;
- } else if (result === 0) {
- // 取消
- continue;
- } else if (result === 2) {
- // 查看
- window.open(topicUrl);
- continue;
- }
- fetch(`https://www.zhihu.com/api/v4/topics/${topicId}/followers`, {
- "headers": {
- "accept": "*/*",
- "accept-language": "zh-CN,zh;q=0.9",
- "sec-ch-ua-mobile": "?0",
- "sec-ch-ua-platform": "\"Windows\"",
- "sec-fetch-dest": "empty",
- "sec-fetch-mode": "cors"
- },
- "referrer": window.location.href,
- "referrerPolicy": "no-referrer-when-downgrade",
- "body": null,
- "method": "DELETE",
- "mode": "cors",
- "credentials": "include"
- }).then(response => {
- let status = response.status;
- console.log("topicId:%s,api operate ret:%s", topicId, status);
- });
- } catch (e) {
- debugger
- console.error('parse topic err:', e);
- }
- }
-
- // page
- let pageElement = document.querySelector('.Pagination');
- let pageChildren = pageElement.children;
- // let innerText = pageChildren[pageChildren.length-2].innerText;
- // console.log("totalPage text:", innerText);
-
- let nextPageElement = pageChildren[pageChildren.length - 1];
- let nextText = nextPageElement.innerText;
- if (nextText === '下一页') {
- nextPageElement.click();
- }
- }
-
- let qustion_div_refresh = false;
-
- let moreQuestionResolve = function () {
- };
-
- // 取消关注的问题
- async function unfollow_questions() {
- if (!menu_value('unfollow_questions')) return;
- debugger
- if (window.location.href !== ('https://www.zhihu.com/question/following')) {
- let result = await createDialogue('批量取消关注问题', '即将打开新页面');
- if (result === -1 || result === 0) {
- return;
- }
- window.open('https://www.zhihu.com/question/following');
- return;
- }
-
- // window.scrollTo(0, 0);
-
- // 监听 [更多] 这个a标签
- let moreQuestionButton = document.querySelector('.zu-button-more');
- const config = {attributes: true, attributeOldValue: true};
- const callback = function (mutationsList, observer) {
- // Use traditional 'for loops' for IE 11
- for (let mutation of mutationsList) {
- if (mutation.type === 'childList') {
- console.log('A child node has been added or removed.');
- } else if (mutation.type === 'attributes') {
- console.log('The ' + mutation.attributeName + ' attribute was modified. oldValue:' + mutation.oldValue);
- if (mutation.oldValue === 'zg-btn-white zu-button-more' || moreQuestionButton.getAttribute("class") === 'zg-btn-white zu-button-more') {
- moreQuestionResolve();
- qustion_div_refresh = true;
- console.log('qustion_div_refresh:',qustion_div_refresh);
- // followedQuesions = document.querySelectorAll('.zg-unfollow');
- } else if (mutation.oldValue === 'zg-btn-white zu-button-more') {
- console.log("更多数据加载中...." + new Date().toLocaleString());
- }
- }
- }
- };
- // 创建一个观察器实例并传入回调函数
- const observer = new MutationObserver(callback);
- // 以上述配置开始观察目标节点
- observer.observe(moreQuestionButton, config);
-
-
- let i = 0;
- let first = true;
- let followedQuesions = document.querySelectorAll('.zg-unfollow');
- async function do_unfollow_questions() {
- while (i < followedQuesions.length) {
- let question = followedQuesions[i];
- let qustionTop = question.getBoundingClientRect().top;
- i++;
- if (qustionTop < 80) {
- continue;
- }
- if (i === 1) {
- window.scrollTo(0, 10);
- }
- if (followedQuesions.length - i <= 2) {
- console.log("点击[更多]按钮,获取数据...");
- moreQuestionButton.click();
- await new Promise((resolve) => moreQuestionResolve = resolve);
- console.log("after click,data:{}",document.querySelectorAll('.zg-unfollow').length)
- }
- if (i % 10 === 0 || qustion_div_refresh) {
- console.log('qustion_div_refresh---->:',qustion_div_refresh);
- qustion_div_refresh = false;
- followedQuesions = document.querySelectorAll('.zg-unfollow');
- }
- let quesionLink = question.parentNode.parentNode.querySelector('.question_link');
- let questionText = quesionLink.innerText;
- let href = quesionLink.getAttribute('href');
- let quesionId = href.substring(href.lastIndexOf('/') + 1);
- let quesionUrl = `https://www.zhihu.com${href}`;
- let scrollHeight = window.scrollY + qustionTop;
- console.log("i:%s/%s,qustion:%s,id:%s,%s", i, followedQuesions.length, questionText, quesionId, quesionUrl);
- let onCreate = !first ? undefined : function () {
- console.log("scrollHeight:", scrollHeight);
- document.getElementById("percyMsgBox").children[0].style.top = scrollHeight + 150 + "px";
- first = false;
- };
- let result = await createDialogue('取消关注问题', questionText, false, onCreate);
- console.log("scrollHeight:",scrollHeight);
- document.getElementById("percyMsgBox").children[0].style.top = scrollHeight + 200 + "px";
- window.scrollTo(0, scrollHeight);
- if (result === -1) {
- // 关闭
- return;
- } else if (result === 0) {
- // 取消
- continue;
- } else if (result === 2) {
- // 查看
- window.open(quesionUrl);
- continue;
- }
- question.click();
- }
- }
- await do_unfollow_questions();
- console.log('取消关注问题结束....');
- observer.disconnect();
- }
-
- // 自定义 urlchange 事件(用来监听 URL 变化)
- function addUrlChangeEvent() {
- history.pushState = (f => function pushState() {
- let ret = f.apply(this, arguments);
- window.dispatchEvent(new Event('pushstate'));
- window.dispatchEvent(new Event('urlchange'));
- return ret;
- })(history.pushState);
-
- history.replaceState = (f => function replaceState() {
- var ret = f.apply(this, arguments);
- window.dispatchEvent(new Event('replacestate'));
- window.dispatchEvent(new Event('urlchange'));
- return ret;
- })(history.replaceState);
-
- window.addEventListener('popstate', () => {
- window.dispatchEvent(new Event('urlchange'))
- });
- }
-
-
- //region 对话框组件
- /**
- * 初始化对话框
- */
- function initDialogueBox() {
- let percyMsgBoxDiv = document.getElementById("percyMsgBox");
- if (percyMsgBoxDiv != null) {
- return;
- }
-
- percyMsgBoxDiv = document.createElement("div");
- percyMsgBoxDiv.id = "percyMsgBox";
-
- percyMsgBoxDiv.style.display = 'none';
-
- let oDiv = document.createElement("div");
-
- /*div样式设置*/
- oDiv.style.backgroundColor = "#F0F0F0";
- oDiv.style.position = "absolute";
- oDiv.style.borderColor = "#AEC7E1";
- oDiv.style.borderWidth = "4px";
- oDiv.style.borderTopWidth = "30px";
- oDiv.style.borderStyle = "solid";
- oDiv.style.width = "250px";
- oDiv.style.height = "120px";
-
- /*根据网页宽度 和窗口大小 来调整左边和顶边,使其居中显示*/
- let w = parseInt(document.documentElement.scrollWidth || document.body.scrollWidth);
- let h = parseInt(document.documentElement.scrollHeight || document.body.scrollHeight);
- // oDiv.style.left = (w - parseInt(oDiv.style.width)) / 5 * 2 + "px";
- // oDiv.style.top = (h - parseInt(oDiv.style.height)) / 5 * 2 + "px";
-
- oDiv.style.left = (w - parseInt(oDiv.style.width)) / 5 * 2 + "px";
- oDiv.style.top = window.screen.availWidth / 6 + 'px';
-
- //region 创建子元素
- /*创建标题*/
- let titleDiv = document.createElement("div");
- titleDiv.style = "text-align: center;position: relative;top: -26px;";
- let titleSpan = document.createElement("span");
- titleSpan.id = 'percyMsgBoxTitle';
- titleSpan.innerHTML = "title";
- titleSpan.style = "color:red";
- titleDiv.appendChild(titleSpan);
- oDiv.appendChild(titleDiv);
-
- /*创建关闭按钮*/
- let closeSpan = document.createElement('span');
- closeSpan.innerHTML = 'X';
- let span1style = "background-color:red;position:absolute;top:-27px;right:3px;color:#FFFFFF;";
- span1style += "width:26px;border-radius:3px;text-align:center;line-height:26px;cursor:pointer;position:absolute;";
- closeSpan.style = span1style;
- closeSpan.onclick = function () {
- percyMsgBoxDiv.style.display = "none";
- dialogueResolve(-1);
- };
- oDiv.appendChild(closeSpan);
-
- /*创建消息*/
- let msgDiv = document.createElement("div");
- msgDiv.style = "text-align:center";
- let msgSpan = document.createElement("span");
- msgSpan.id = 'percyMsg';
- msgSpan.innerHTML = 'message';
- msgSpan.style = "color:red";
- msgDiv.appendChild(msgSpan);
- oDiv.appendChild(msgDiv);
-
- /*创建确定按钮*/
- let confirmButton = document.createElement("input");
- confirmButton.style = "left:30px;bottom:20px;position:absolute;";
- confirmButton.type = "button";
- confirmButton.value = "确定";
- confirmButton.onclick = function () {
- document.getElementById("percyMsgBox").style.display = "none";
- dialogueResolve(1);
- };
- oDiv.appendChild(confirmButton);
-
- /*取消按钮*/
- let cancelButton = document.createElement("input");
- cancelButton.style = "right:30px;bottom:20px;position:absolute;";
- cancelButton.type = "button";
- cancelButton.value = "取消";
- cancelButton.onclick = function () {
- document.getElementById("percyMsgBox").style.display = "none";
- dialogueResolve(0);
- };
- oDiv.appendChild(cancelButton);
-
- /*查看按钮*/
- let detailButton = document.createElement("input");
-
- detailButton.style = "left:104px;bottom:20px;position:absolute;";
- detailButton.type = "button";
- detailButton.value = "查看";
- detailButton.onclick = function () {
- document.getElementById("percyMsgBox").style.display = "none";
- dialogueResolve(2);
- };
- oDiv.appendChild(detailButton);
- //endregion
-
- percyMsgBoxDiv.appendChild(oDiv);
- document.body.appendChild(percyMsgBoxDiv);
-
- /*拖动事件处理*/
- oDiv.onmousedown = function (ev) {/*鼠标按下*/
- let disX = ev.clientX - oDiv.offsetLeft;
- let disY = ev.clientY - oDiv.offsetTop;
- // console.log(disY);
- if (disY > 30) {/*使其只拖动标题栏有效*/
- return;
- }
- document.onmousemove = function (ev) {
- let l = ev.clientX - disX;
- let t = ev.clientY - disY;
-
- oDiv.style.left = l + 'px';
- oDiv.style.top = t + 'px';
- };
- document.onmouseup = function () {/*鼠标松开*/
- document.onmousemove = null;
- document.onmouseup = null
- }
- };
- }
-
-
- let dialogueResolve = function () {
- };
-
- /**
- * 创建对话框
- * @param title
- * @param message
- * @param isTop 是否有遮罩
- * @param onCreate 对话框创建完成回调函数
- * @returns {Promise<int>} 返回 -1:关闭 0:取消 1:确定
- */
- let initialWidth = null;
- let initialHeight = null;
-
- async function createDialogue(title, message, shade, onCreate) {
- if (shade === undefined) {
- shade = true;
- }
- initDialogueBox();
- let percyMsgBoxDiv = document.getElementById("percyMsgBox");
- percyMsgBoxDiv.style.display = "block";
- let div = percyMsgBoxDiv.children[0];
- if (shade) {
- percyMsgBoxDiv.style = "width:100%;height:100%;position:absolute;left:0;top:0;z-index:99;";
- percyMsgBoxDiv.style.height = document.body.clientHeight + "px";
- } else {
- percyMsgBoxDiv.style = "";
- div.style.zIndex = "99";
- }
- if (initialWidth == null || initialHeight == null) {
- initialWidth = parseInt(div.style.width.replace("px", ""));
- initialHeight = parseInt(div.style.height.replace("px", ""));
- }
-
- document.getElementById("percyMsgBoxTitle").innerText = title;
- document.getElementById("percyMsg").innerText = message;
-
- let q = Math.pow(message.length / 18, 1 / 5);
- if (q < 1) {
- q = 1;
- }
-
- div.style.width = initialWidth * q + "px";
- div.style.height = initialHeight * q + "px";
-
- console.log('q:%s,w:%,h:%s', q, div.style.width, div.style.height);
-
- // 调整查看按钮的位置
- let buttons = percyMsgBoxDiv.querySelectorAll('input[type=button]');
- let a = buttons[0].getClientRects()[0].x;
- let b = buttons[1].getClientRects()[0].x;
-
- let a_left = buttons[0].style.left;
- a_left = parseInt(a_left.replace("px", ''));
- a_left += ((b - a) / 2);
-
- // 查看按钮
- buttons[2].style.left = a_left + "px";
-
- if (onCreate !== null && onCreate !== undefined) {
- onCreate();
- }
-
- return new Promise(function (resolve) {
- dialogueResolve = resolve;
- });
- }
-
- //endregion
-
- (function () {
- if (window.onurlchange === undefined) {
- addUrlChangeEvent();
- } // Tampermonkey v4.11 版本添加的 onurlchange 事件 grant,可以监控 pjax 等网页的 URL 变化
- window.addEventListener('urlchange', function () { // 针对的是从单个回答页跳转到完整回答页时
- // Violentmonkey 比 Tampermonkey 加载更早,会导致一些元素还没加载,因此需要延迟一会儿
- // Tampermonkey 4.18.0 版本可能需要延迟一会执行
- if (GM_info.scriptHandler === 'Violentmonkey' || (GM_info.scriptHandler === 'Tampermonkey' && parseFloat(GM_info.version.slice(0, 4)) >= 4.18)) {
- setTimeout(start, 300);
- } else {
- start();
- }
- });
-
- // Violentmonkey 比 Tampermonkey 加载更早,会导致一些元素还没加载,因此需要延迟一会儿
- // Tampermonkey 4.18.0 版本可能需要延迟一会执行
- if (GM_info.scriptHandler === 'Violentmonkey' || (GM_info.scriptHandler === 'Tampermonkey' && parseFloat(GM_info.version.slice(0, 4)) >= 4.18)) {
- setTimeout(start, 300);
- } else {
- start();
- }
-
- function start() {
- debugger
- let flag = location.pathname.startsWith('/people/');
- if (flag && (location.pathname.endsWith('/following') || location.pathname.includes('/following?page'))) { // 关注的人
- console.log('取消关注的人');
- unfollow_members().then(r => console.log(r)); //取消关注的人
- return;
- }
- if (flag && location.pathname.includes('/following/columns')) { // 关注的专栏
- console.log('取消关注的专栏');
- // unfollow_columns(); // 取消关注的专栏
- return;
- }
- if (flag && location.pathname.includes('/following/topics')) { // 关注的话题
- console.log('取消关注的话题');
- unfollow_topics().then(r => console.log(r)); // 取消关注的话题
- return;
- }
- if ((flag && location.pathname.includes('/following/questions')) || window.location.href === 'https://www.zhihu.com/question/following') { // 关注的问题
- console.log('取消关注的问题');
- unfollow_questions().then(r => console.log(r)); // 取消关注的问题
- return;
- }
- }
- })();