您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Infinity Pro 网站版,将您保存的网站导出为一个 Excel 文件。导出前需要登录账号,如果导出的网站为空,请先刷新界面。
- // ==UserScript==
- // @name Infinity 导出 Excel
- // @version 1.0.5
- // @icon https://inftab.com/icon/favicon.ico
- // @description Infinity Pro 网站版,将您保存的网站导出为一个 Excel 文件。导出前需要登录账号,如果导出的网站为空,请先刷新界面。
- // @author 曦源 <pinkones@qq.com>
- // @match *://inftab.com/*
- // @match *://www.inftab.com/*
- // @grant none
- // @run-at document-end
- // @namespace 项目地址github
- // @supportURL https://github.com/SunBrook/infinity_tool_scripts
- // @homepageURL https://github.com/SunBrook/infinity_tool_scripts
- // ==/UserScript==
- 'use strict';
- function init(){
- // 目标位置
- var backup_btn_box = document.querySelector("side-profile")
- .shadowRoot.querySelector("side-user")
- .shadowRoot.querySelector("infinito-card.backup-recovery .backup-btn-box");
- // 创建 Excel 导出页面元素
- var export_excel_node = document.createElement("div");
- export_excel_node.className = "backup-btn-card";
- export_excel_node.innerHTML = ''+
- '<div class="backup-btn-content" id="ExportExcel">'+
- '<div class="backup-btn">'+
- '<div class="backup-btn-title">'+
- '<span class="backup-btn-title-text"><!---->导出 Excel 文件<!----></span>'+
- '<i-svg></i-svg>'+
- '</div>'+
- '<span class="backup-btn-desc"><!---->从当前本地数据导出<!----></span>'+
- '</div>'+
- '</div>';
- // 创建完成后,然后在设置图标
- var createFirst = new Promise(function (resolve, reject){
- backup_btn_box.append(export_excel_node);
- resolve("finish");
- });
- createFirst.then(function(message){
- // 设置导出图标样式
- var ico_svg = backup_btn_box.querySelector(".backup-btn-card:nth-child(4) .backup-btn-title i-svg")
- .shadowRoot.querySelector(".svg");
- ico_svg.style.webkitMaskImage = "url(/images/arrow-right.d51ffb7.svg)";
- });
- backup_btn_box.querySelector(".backup-btn-card:nth-child(4) div#ExportExcel").onclick = function(){
- GetWebInfoV2();
- }
- }
- setTimeout(init, 3000);
- //网站数量
- var tb_count = 0;
- //获取用户的网站信息
- function GetWebInfoV2() {
- //表头
- var tableHtml = '<div id="z_wrapper" style="z-index: 999999;position: absolute;background-color: white;width: 1000px;height: 500px;margin-left: 150px;margin-top:50px;overflow-y: scroll;padding:8px;filter:alpha(Opacity=80);-moz-opacity:0.5;opacity: 0.8;border-radius: 15px;">' +
- '<table id="z_table" style="border-collapse: collapse;text-align:center;">' +
- '<tr>' +
- '<th style="border: 1px solid #ccc;padding:5px;width:500px;height:40px;">名称</th>' +
- '<th style="border: 1px solid #ccc;padding:5px;width:500px;height:40px;">网址</th>' +
- '<th style="border: 1px solid #ccc;padding:5px;width:100px;height:40px;">分类</th>' +
- '</tr>';
- //获取 window.localStorage
- var storage = window.localStorage;
- if (!storage) {
- alert("浏览器不支持LocalStorage");
- return;
- }
- //用户收藏的网站json字符串
- var store_site = storage["store-site"];
- if (!store_site) {
- alert("导出失败,请刷新页面重试");
- return;
- }
- //字符串 转 ToJson对象
- var u_list = JSON.parse(store_site).sites;
- //遍历 - 每页
- for (let i = 0; i < u_list.length; i++) {
- var page_list = u_list[i]; //某一页
- for (let j = 0; j < page_list.length; j++) {
- var unit_list = page_list[j]; //某个单元格
- var image_type = unit_list.bgType;
- //判断是 单个网站 还是文件夹 image / folder
- if (image_type == "image" || image_type == "color") {
- //单个网站 纯色
- //网站
- var url = unit_list.target;
- //过滤 infinity:// 开头的官方应用
- var fdStart = url.indexOf("infinity://");
- if (fdStart == 0) continue;
- //名称
- var name = unit_list.name;
- tableHtml += '<tr>' +
- '<td style="border: 1px solid #ccc;padding:5px;height:25px;" align="center">' + name + '</td>' +
- '<td style="border: 1px solid #ccc;padding:5px;height:25px;"><a href="' + url + '" target="_blank">' + url + '</a></td>' +
- '<td style="border: 1px solid #ccc;padding:5px;height:25px;" align="center"></td>' +
- '</tr>';
- tb_count++;
- } else if (image_type == undefined) {
- //文件夹
- //文件夹名称
- var folder_name = unit_list.name;
- //文件夹子项集合
- var folder_list = unit_list.children;
- //只要用户自定义的网站集合
- var item_user_disposed = new Array();
- for (let k = 0; k < folder_list.length; k++) {
- var url = folder_list[k].target;
- var fdStart = url.indexOf("infinity://");
- if (fdStart == 0) continue;
- item_user_disposed.push({ url: url, name: folder_list[k].name });
- }
- //组成table
- if (!item_user_disposed.length) continue;
- for (let m = 0; m < item_user_disposed.length; m++) {
- if (m == 0) {
- tableHtml += '<tr>' +
- '<td style="border: 1px solid #ccc;padding:5px;height:25px;" align="center">' + item_user_disposed[m].name + '</td>' +
- '<td style="border: 1px solid #ccc;padding:5px;height:25px;"><a href="' + item_user_disposed[m].url + '" target="_blank">' + item_user_disposed[m].url + '</a></td>' +
- '<td style="border: 1px solid #ccc;padding:5px;height:25px;" align="center" rowspan="' + item_user_disposed.length + '">' + folder_name + '</td>' +
- '</tr>';
- } else {
- tableHtml += '<tr>' +
- '<td style="border: 1px solid #ccc;padding:5px;height:25px;" align="center">' + item_user_disposed[m].name + '</td>' +
- '<td style="border: 1px solid #ccc;padding:5px;height:25px;"><a href="' + item_user_disposed[m].url + '" target="_blank">' + item_user_disposed[m].url + '</a></td>' +
- '</tr>';
- }
- }
- tb_count += item_user_disposed.length;
- }
- }
- }
- tableHtml += '</table></div><a id="dlink" style="display:none;"></a><input type="button" onclick="tableToExcel(\'tablename\', \'name\', \'myfile.xlsx\')" value="Export to Excel">';
- var div_table = document.createElement("div");
- div_table.id = 'temp_div';
- div_table.innerHTML = tableHtml;
- document.body.appendChild(div_table);
- console.log("网站个数:", tb_count);
- // tableToExcel('z_table', " 累计 " + tb_count + " 个网站"); //直接下载
- var userInfo = storage["store-user"];
- if (!userInfo) {
- tableToExcel('z_table', "累计 " + tb_count + " 个网站", "InfinityPro " + getCurrentDate(2));
- } else {
- var user_info = JSON.parse(userInfo).userInfo;
- if(user_info.name){
- var space = " ";
- tableToExcel('z_table', "用户:" + user_info.name + space + "共收藏 " + tb_count + " 个网站", "InfinityPro " + getCurrentDate(2));
- }
- else{
- tableToExcel('z_table', "累计 " + tb_count + " 个网站", "InfinityPro " + getCurrentDate(2));
- }
- }
- //销毁table
- document.getElementById("temp_div").remove();
- }
- //时间类
- function getCurrentDate(format) {
- var now = new Date();
- var year = now.getFullYear(); //年份
- var month = now.getMonth();//月份
- var date = now.getDate();//日期
- var day = now.getDay();//周几
- var hour = now.getHours();//小时
- var minu = now.getMinutes();//分钟
- var sec = now.getSeconds();//秒
- month = month + 1;
- if (month < 10) month = "0" + month;
- if (date < 10) date = "0" + date;
- if (hour < 10) hour = "0" + hour;
- if (minu < 10) minu = "0" + minu;
- if (sec < 10) sec = "0" + sec;
- var time = "";
- //精确到天
- if (format == 1) {
- time = year + "-" + month + "-" + date;
- }
- //精确到分
- else if (format == 2) {
- time = year + "/" + month + "/" + date + " " + hour + ":" + minu + ":" + sec;
- }
- return time;
- }
- //导出excel
- var tableToExcel = (function () {
- var uri = 'data:application/vnd.ms-excel;base64,',
- template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><?xml version="1.0" encoding="UTF-8" standalone="yes"?><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--></head><body><table>{table}</table></body></html>',
- base64 = function (s) { return window.btoa(unescape(encodeURIComponent(s))) },
- format = function (s, c) {
- return s.replace(/{(\w+)}/g,
- function (m, p) { return c[p]; })
- }
- // 直接下载
- // return function (table, name) {
- // if (!table.nodeType) table = document.getElementById(table)
- // var ctx = { worksheet: name || 'Worksheet', table: table.innerHTML }
- // window.location.href = uri + base64(format(template, ctx))
- // }
- // 重命名下载文件
- return function (table, name, filename) {
- if (!table.nodeType) table = document.getElementById(table)
- var ctx = { worksheet: name || 'Worksheet', table: table.innerHTML }
- document.getElementById("dlink").href = uri + base64(format(template, ctx));
- document.getElementById("dlink").download = filename;//这里是关键所在,当点击之后,设置a标签的属性,这样就可以更改标签的标题了
- document.getElementById("dlink").click();
- }
- })()