您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
在Gitmind目录页一键导出当前目录下文件为pdf
// ==UserScript== // @name Gitmind批量导出文件为pdf // @namespace http://tampermonkey.net/ // @version 0.3 // @description 在Gitmind目录页一键导出当前目录下文件为pdf // @author Ctrl+T // @match https://gitmind.cn/app/doc/* // @match https://gitmind.cn/app/my/dir/* // @match https://gitmind.cn/app/my // @grant GM_openInTab // ==/UserScript== (function () { let url = window.location.href; if (url.includes('my')) { // 目录页 addButton(); } else if (url.includes('doc') && url.includes('export')) { // 文件页 download(); } })(); /** * 增加按钮“批量导出”到“多选”之后 */ function addButton() { let parentDom = document.querySelector('.tool-bar > div'); let buttonDom = document.createElement('div'); let batchButtonDom = document.querySelector('.tool-bar .batch-btn'); buttonDom.innerText = '批量导出' buttonDom.className = 'mind-btn fr'; buttonDom.onclick = function() { getDirGuid(); } parentDom.insertBefore(buttonDom, batchButtonDom); } /** * 第一步:获取目录号 */ function getDirGuid() { let url = window.location.href; if (url.includes('dir')) { // 非根页面,直接从url获取dirguid getLs(url.substring(url.lastIndexOf("\/")+1, url.length)); } else { // 根页面,使用ajax获取 let xhr = customXMLHttpRequest('post','https://api.gitmind.cn/api/get_root_dir',true); xhr.send('{"naotu_type":0}'); xhr.onreadystatechange = function() { if (xhr.readyState == 4) { getLs(xhr.response['data']['file_guid']); } } } } /** * 第二步:使用目录号获取本页面所有文件信息 * @param {String} dirGuid 目录号 */ function getLs(dirGuid) { let xhr = customXMLHttpRequest('post','https://api.gitmind.cn/api/ls',true); let payLoad = { 'dir_guid': dirGuid, 'naotu_type': 0 } xhr.send(JSON.stringify(payLoad)); xhr.onreadystatechange = function() { if (xhr.readyState == 4) { openFiles(xhr.response.data) } } } /** * 第三步:根据文件列表打开对应网页进行下载 * @param {List} files 文件列表 */ function openFiles(files) { for (let file of files) { if (file['file_type'] == 'directory') { getLs(file['file_guid']); } else if (file['file_type'] == 'file') { GM_openInTab('https://gitmind.cn/app/doc/' + file['file_guid'] + '?export') } } } /** * 自定义XHR对象闭包,提前设定好token */ let customXMLHttpRequest = (function (jwtoken) { function getXMLHttpRequest(method, url, async){ var xmlHttpRequest = new XMLHttpRequest(); xmlHttpRequest.open(method, url, async); xmlHttpRequest.setRequestHeader('Authorization', 'Bearer ' + jwtoken); xmlHttpRequest.setRequestHeader('Content-Type', 'application/json;charset=UTF-8') xmlHttpRequest.responseType = 'json'; return xmlHttpRequest; } return getXMLHttpRequest; })(localStorage.getItem('mindmap_api_token')); /** * 文件页的下载脚本 */ function download() { // 替换XHR函数 replaceXHR(); // 外轮询,等待界面上的“导出”按钮出现 let outerInterval = setInterval(function () { let exportBtn = document.querySelector('.editor-header-right button:last-child'); if (exportBtn) { exportBtn.click() clearInterval(outerInterval); // 内轮询,等待模态框中的单选按钮出现 let innerInterval = setInterval(function () { let radios = document.querySelectorAll('.dialog-body .radio-item'); if (radios.length) { clearInterval(innerInterval); for (let radio of radios) { if (radio.getElementsByClassName('el-radio__label')[0].textContent == 'PDF') { // 选择类别为pdf radio.click(); let modalExportBtn = document.querySelector('.dialog-btns button') modalExportBtn.click(); break; } } } }, 20) } }, 20) } /** * 替换XHR函数,使得下载完成后自动关闭页面 */ function replaceXHR() { var open = window.XMLHttpRequest.prototype.open, send = window.XMLHttpRequest.prototype.send; function openReplacement(method, url, async, user, password) { this._url = url; return open.apply(this, arguments); } function sendReplacement(data) { if (this.onreadystatechange) { this._onreadystatechange = this.onreadystatechange; } this.onreadystatechange = onReadyStateChangeReplacement; return send.apply(this, arguments); } function onReadyStateChangeReplacement() { // 下载完成后自动关闭页面 if (this._url == "https://api.gitmind.cn/api/export-pdf" && this.readyState == 4) { window.open(location, '_self').close(); } if (this._onreadystatechange) { return this._onreadystatechange.apply(this, arguments); } } window.XMLHttpRequest.prototype.open = openReplacement; window.XMLHttpRequest.prototype.send = sendReplacement; }
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址