找回密码
 立即注册
搜索
查看: 17903|回复: 76

[福利] S1用户标记脚本,复!活!(支持本地导入导出)

[复制链接]
     
发表于 2022-1-27 16:28 | 显示全部楼层 |阅读模式
本帖最后由 Nanachi 于 2023-1-31 15:02 编辑

近日来,坛内屁股大战愈演愈烈,反串、理中客、温和派、激进派层出不穷。逢此乱世,潭友们对用户进行标记的需求逐渐攀升。

在前人S1巨魔标记器(by masakahahaha)和论坛屏蔽功能的快捷方式脚本 1.0(by 冰箱研会长)的基础上,我缝合出了一个新版用户标记脚本。

本脚本完全本地存储,无联网读取、写入功能,请放心使用。

使用体验

在每个用户的头像下方,会出现一个按钮。

点击进行标记。

标记之后网页自动刷新,用户名下方原有用户组区域变为红色标记内容,更下方显示取消标记按钮。



点击右上角“设置”



顶部导航栏会有两个导入导出按钮。



安装方式

1. 进入油猴脚本页面点击进行安装

S1 User Marker

2. GitHub源点击安装

S1 User Marker


这下总不至于因为被举报导致脚本无法安装了吧。

评分

参与人数 25战斗力 +27 收起 理由
沉舟侧畔 + 1 欢乐多
OvEff0 + 1 好评加鹅
蓝灯横滨 + 1 好评加鹅
爱尔米娜 + 1 好顶赞
璃絵和花瑠 + 1
luluwan + 1 好评加鹅
xxxxx09090 + 2
armedangel + 1 好评加鹅
三尖酸努努 + 1 好评加鹅
寻寻!! + 1 好评加鹅
mustforver + 1 好评加鹅
冰箱研会长 + 1
masakahaha + 2 好评加鹅
upisud18 + 1 好评加鹅
MixRadio + 2 好评加鹅
Sevenzerofive + 1 好评加鹅
桐名 -1 好评加鹅
kenqqex + 2 好评加鹅
睏睏 + 1 致敬
清真肥皂厂 + 1 为了论坛生态环境尽心尽力

查看全部评分

回复

使用道具 举报

     
发表于 2022-1-27 16:29 | 显示全部楼层
好顶支持
回复

使用道具 举报

     
发表于 2022-1-27 16:29 | 显示全部楼层
建议放github

greasyfork总是还不稳
回复

使用道具 举报

     
发表于 2022-1-27 16:29 | 显示全部楼层
好顶支持
回复

使用道具 举报

     
发表于 2022-1-27 16:29 | 显示全部楼层
好顶支持
回复

使用道具 举报

发表于 2022-1-27 16:30 | 显示全部楼层
有没有一键在v区以外屏蔽v区活跃管人痴帐号的功能

评分

参与人数 1战斗力 +1 收起 理由
希望之花 + 1 刻不容缓

查看全部评分

回复

使用道具 举报

     
发表于 2022-1-27 16:31 来自手机 | 显示全部楼层
好!

—— 来自 Sony J9210, Android 11上的 S1Next-鹅版 v2.5.2-play
回复

使用道具 举报

     
发表于 2022-1-27 16:32 | 显示全部楼层
堂堂复活
回复

使用道具 举报

     
发表于 2022-1-27 16:32 | 显示全部楼层
要是大家能共享标记就好了,每个人都可以给别人加标记或者给已有的标记点赞,点赞越多字体越大,让公认的傻逼无所遁形
回复

使用道具 举报

头像被屏蔽
发表于 2022-1-27 16:33 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

     
 楼主| 发表于 2022-1-27 16:33 | 显示全部楼层
AlphardAlSheya 发表于 2022-1-27 16:32
要是大家能共享标记就好了,每个人都可以给别人加标记或者给已有的标记点赞,点赞越多字体越大,让公认的傻 ...
发表于 2021-9-4 13:59

本帖最后由 kurihayn 于 2021-9-4 14:02 编辑


加了共享很容易变成猎巫吧……比如一个巨魔群在群友号召下集体标记另一个人是巨魔,岂不是连证据都不需要就可以让对方成过街老鼠了
在以前泥潭黑社会群势头还很旺的时候我算是亲眼见过几次类似的情况


上一个帖子已经讨论过了,共享之后容易被小团体操纵。

https://bbs.saraba1st.com/2b/for ... ;page=1#pid52617558
回复

使用道具 举报

     
发表于 2022-1-27 16:35 | 显示全部楼层
这个楼里一窝管人痴,怕不是小团体
回复

使用道具 举报

     
发表于 2022-1-27 16:37 | 显示全部楼层
Nanachi 发表于 2022-1-27 16:33
上一个帖子已经讨论过了,共享之后容易被小团体操纵。

https://bbs.saraba1st.com/2b/forum.php?mod=v ...

草,看了你自由加载名单的想法,好棒
回复

使用道具 举报

     
发表于 2022-1-27 16:39 来自手机 | 显示全部楼层
提出怕猎巫的是温和派仙女,没有人比仙女更懂猎巫

—— 来自 Sony J9210, Android 11上的 S1Next-鹅版 v2.5.2-play
回复

使用道具 举报

头像被屏蔽
     
发表于 2022-1-27 16:40 来自手机 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

     
发表于 2022-1-27 16:42 | 显示全部楼层
只有塞抹布有时候想不起来为啥塞了,垃圾分类还是有必要的
回复

使用道具 举报

     
发表于 2022-1-27 16:44 来自手机 | 显示全部楼层
喷了
回复

使用道具 举报

     
 楼主| 发表于 2022-1-27 16:51 | 显示全部楼层
橋白 发表于 2022-1-27 16:29
建议放github

greasyfork总是还不稳

GitHub和Pastebin一样的,都无法点击安装需要手动复制粘贴才行吧。
回复

使用道具 举报

     
发表于 2022-1-27 17:00 | 显示全部楼层
我之前用标记器,最常给人标记的是
「好人」、「睏睏PTSD」(已知不喜欢我的人,这样再被同样的人骂/扣鹅会少难过一点)、「仙女PTSD」、「很凶」
回复

使用道具 举报

发表于 2022-1-27 17:04 | 显示全部楼层
顺道分享一个Archiver模式下换色脚本,平时上班一般都用无图版,白色底太刺眼了,换了个底色

// ==UserScript==
// @Name        s1 style
// @namespace   https://bbs.saraba1st.com/2b/
// @include     https://*.saraba1st.com/2b/archiver/*
// @version     2.0.0
// @grant       kenqq
// ==/UserScript==
if (document.title == 'Error') {
    //do something
    document.head.innerHTML = '';
    //do something
    document.body.innerHTML = '   <div style="position: absolute; left: 50%;top:15%">' +
    '<div style="position: relative; left: -50%; border: dashed red 1px;">' +
    '<img width="640" height="427" src="http://static.hdslb.com/error/404.png"></div></div>';
    document.body.style.background = 'black';
    // '#004000';
    document.body.style.color = '#ffffff';
    document.body.style.fontSize = 'x-large';
    return ;
}



Object.prototype.clone = function () {
    var copy = (this instanceof Array) ? [
    ] : {
    };
    for (attr in this) {
        if (!obj.hasOwnProperty(attr)) continue;
        copy[attr] = (typeof this == 'object') ? obj[attr].clone()  : obj[attr];
    }
    return copy;
};
//修改标题
/*
var aa = document.getElementById('header').getElementsByTagName("h2");
aa[0].innerHTML ='Love Live!';
*/
var aa = document.getElementById('header');
//aa.style.display   =   "none";   //隐藏而不删除  
aa.parentNode.removeChild(aa);
//删除
var bb = document.getElementById('footer');
//bb.style.display   =   "none";   //隐藏而不删除  
bb.parentNode.removeChild(bb);
//删除
function addGlobalStyle(css) {
    var head,
    style;
    head = document.getElementsByTagName('head') [0];
    if (!head) {
        return ;
    }
    style = document.createElement('style');
    style.type = 'text/css';
    style.innerHTML = css;
    head.appendChild(style);
}





addGlobalStyle('.author1 {background-color:#4372d1;' +
'padding: 6px; border-top: 1px #ddddee solid}');




document.body.style.background = 'black';

//document.body.style.background = '#FFE7F7';


// '#004000';
document.body.style.color = '#ffffff';
document.body.style.fontSize = 'x-large';
[
].forEach.call(document.querySelectorAll('.author'), function (el) {
    el.className = '';
    el.className = 'author1';
}
);
[
].forEach.call(document.querySelectorAll('a'), function (el) {
    el.style.color = '#CCCCFF';
    //console.log(el.parentNode.innerHTML);
    //console.log(el.parentNode.tagName);
    if (el.parentNode.tagName == 'LI') {
        el.parentNode.innerHTML += ' '
        + '<a target="_blank" style="color: rgb(204, 204, 255);" href=' + el.href + '?page=1000>❤</a>'
        + ' ';
    }
}
);

document.querySelector( 'center' ).remove();


回复

使用道具 举报

发表于 2022-1-27 17:17 | 显示全部楼层
lz,在ff96和Greasemonkey4.11 (均为最新版本)下
Gm_ 的方法都不行,_ 换成. 也不行
回复

使用道具 举报

     
发表于 2022-1-27 17:19 来自手机 | 显示全部楼层
听说巨魔标记器被举报掉了?
回复

使用道具 举报

     
发表于 2022-1-27 17:19 来自手机 | 显示全部楼层
Nanachi 发表于 2022-1-27 16:33
上一个帖子已经讨论过了,共享之后容易被小团体操纵。

https://bbs.saraba1st.com/2b/forum.php?mod=v ...

可惜,不然我觉得大伙弄个词云多好玩
回复

使用道具 举报

     
发表于 2022-1-27 17:21 | 显示全部楼层

厉害了。
回复

使用道具 举报

     
发表于 2022-1-27 17:23 | 显示全部楼层
给个压缩之后文本化复制出来,可以给别人合并标记的能力?
回复

使用道具 举报

     
 楼主| 发表于 2022-1-27 17:46 | 显示全部楼层
kenqqex 发表于 2022-1-27 17:17
lz,在ff96和Greasemonkey4.11 (均为最新版本)下
Gm_ 的方法都不行,_ 换成. 也不行 ...

我用的Edge+4.13.6138版本,没有问题。

GM主要是为了本地存储,暂时没想到其他的变通方法。先前的巨魔标记脚本引用了一个已被删除的外置JS
回复

使用道具 举报

     
发表于 2022-1-27 17:52 | 显示全部楼层
标记的目的是为了方便避开还是方便定位杠?如果是避开的话黑名单不好吗?至于共享标记,你们现在不就是把鹅这么用的。很多人上来就是一句为什么负那么多鹅的原因知道了?其实这些人只知道负鹅,根本不知道别人为什么负鹅
回复

使用道具 举报

     
 楼主| 发表于 2022-1-27 17:55 | 显示全部楼层
lacusforever 发表于 2022-1-27 17:52
标记的目的是为了方便避开还是方便定位杠?如果是避开的话黑名单不好吗?至于共享标记,你们现在不就是把鹅 ...

黑名单和标记是两码事。黑名单会屏蔽掉发言,标记不会。

对于想不因人废言的用户来说,标记更加恰当点:既能看见对方说了什么,又可以在想要回复的时候查看过往标记,降低不当的互动。
回复

使用道具 举报

     
发表于 2022-1-27 18:00 | 显示全部楼层
有没有导出名单的方法
回复

使用道具 举报

     
发表于 2022-1-27 18:05 | 显示全部楼层
Nanachi 发表于 2022-1-27 16:51
GitHub和Pastebin一样的,都无法点击安装需要手动复制粘贴才行吧。

GitHub上的东西都可以以raw格式打开
刚刚试了一下,TamperMonkey可以识别
回复

使用道具 举报

     
发表于 2022-1-27 18:11 来自手机 | 显示全部楼层
这样一看,RPGcodex 那种投递表情还挺不错的?
花费一死鱼,投递一个「巨魔」或者「打滚」或者「鹅」,然后可是在个人信息页查看这个人分别有多少表情。
回复

使用道具 举报

     
 楼主| 发表于 2022-1-27 19:14 | 显示全部楼层
Cirn09 发表于 2022-1-27 18:05
GitHub上的东西都可以以raw格式打开
刚刚试了一下,TamperMonkey可以识别

我试了一下没办法识别,你再试试?

Github
回复

使用道具 举报

     
 楼主| 发表于 2022-1-27 19:14 | 显示全部楼层
Lisylfn 发表于 2022-1-27 18:00
有没有导出名单的方法

数据是每个脚本独立存储在浏览器里面的,可以自行往脚本里面加入代码遍历导出。

我不会JS所以不清楚该怎么写导出功能。
回复

使用道具 举报

     
发表于 2022-1-27 21:26 | 显示全部楼层
导入导出已经写好了,但不是很完美:
1.导出是复制到粘贴板,同样导入是从粘贴板导入的,格式是json({"username": "title", ...})
2.导入时如果判断这个人是不是在本地已经有标记,有标记且不重复内容的用,隔开后在后面追加,但是我没考虑导入的内容已经有逗号隔开了

按钮在快捷导航栏 居右如图:


没有丰富的测试过,如果使用有bug可以提
最后代码如下:
  1. // ==UserScript==
  2. // [url=home.php?mod=space&uid=103359]@Name[/url]         S1 User Marker
  3. // @namespace    http://tampermonkey.net/
  4. // @version      1.0
  5. // @description  Mark certain user
  6. // @ogirin_author       冰箱研会长、masakahaha
  7. // @author Nanachi
  8. // [url=home.php?mod=space&uid=528388]@Match[/url]        https://bbs.saraba1st.com/2b/*
  9. // [url=home.php?mod=space&uid=155015]@grant[/url] GM_getValue
  10. // @grant GM_setValue
  11. // @grant        GM_deleteValue
  12. // @grant        GM_listValues
  13. // ==/UserScript==

  14. function getElementByXpath(path) {
  15.     return document.evaluate(path, document, null,
  16.         XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
  17. }

  18. function Blockbutton_Appender(HtmlDiv, Block_Target, Origin_Name,PostNumber) {
  19.     var Block_status = '';
  20.     var status_text = GM_getValue(Origin_Name,null) ? '取消标记' : '标记此人';
  21.     if (GM_getValue(Origin_Name,null)) {
  22.         Block_Target.style='color:red';
  23.         Block_Target.innerText = Block_Target.innerText + '#' + GM_getValue(Origin_Name);
  24.     }
  25.     function buttonClick(){
  26.         console.log('test');
  27.         console.log(Origin_Name);
  28.         if (GM_getValue(Origin_Name,null)) {
  29.             console.log('1');
  30.             GM_deleteValue(Origin_Name);
  31.             window.location.reload();
  32.         } else {
  33.             console.log('2');
  34.             var tag = prompt("输入自定义标签","");
  35.             if (tag != undefined && tag != "") {
  36.                 console.log(Origin_Name);
  37.                 //                blockedList.set(Block_Target, tag);
  38.                 GM_setValue(Origin_Name, tag);
  39.                 window.location.reload();
  40.             }
  41.         }
  42.     }
  43.     var StrPostNumber = PostNumber.toString();
  44.     HtmlDiv.innerHTML = HtmlDiv.innerHTML.concat(`
  45.     <table class="tfm" cellspacing="0" cellpadding="0">
  46.     <tbody><tr>
  47.     <td>
  48.     <button type="button" name="blacklistsubmit_btn" id="blockbtn`,StrPostNumber,`" value="true" class="pn vm" ><em>`,status_text,`</em></button>
  49.     </td>
  50.     </tr>
  51.     </tbody></table>`);
  52.     var button1 = document.getElementById("blockbtn"+PostNumber.toString());
  53.     console.log(button1);
  54.     // 在js页面获取HTML的按钮函数
  55.     button1.onclick = buttonClick;
  56. }

  57. function S1_Reply_Blocker() {
  58.     var PostLists = getElementByXpath(`//div[@id='postlist']`);
  59. //    console.log(PostLists)
  60.     if (PostLists) {
  61.         var PostCounter = 1;
  62.         while (getElementByXpath(`//div[@id='postlist']/div[${PostCounter}]`)) {
  63.             var PostAuthor = getElementByXpath(`//div[@id='postlist']/div[${PostCounter}]/table/tbody/tr[1]/td[1]/div/div[1]/div/a`);
  64.             if(PostAuthor){
  65.             if(PostAuthor.innerText){
  66.             var origin_author = PostAuthor.innerText;
  67.             }
  68.             var PostAruthorColumn = getElementByXpath(`//div[@id='postlist']/div[${PostCounter}]/table[1]/tbody[1]/tr[1]/td[1]/div[1]`);
  69.             if (PostAruthorColumn) {
  70.                 Blockbutton_Appender(PostAruthorColumn, PostAuthor,origin_author,PostCounter);
  71.             }}
  72.             PostCounter = PostCounter + 1;
  73.         }
  74.     }

  75.     var Qmenu = getElementByXpath(`//div[@id='nv']`);

  76.     if (Qmenu) {
  77.         ExportButton_Appender(Qmenu)
  78.         // ImportButton_Appender(Qmenu)
  79.     }

  80. }

  81. function ExportButton_Appender(nvDiv) {
  82.     nvDiv.innerHTML= nvDiv.innerHTML.concat(`
  83.     <button type="button" name="blacklistexport_btn" id="exportbtn" value="true" style="float: right; margin: 5px 8px 0;" class="pn vm" ><em>导出标记</em></button>
  84.     <button type="button" name="blacklistimport_btn" id="importbtn" value="true" style="float: right; margin: 5px 8px 0;" class="pn vm" ><em>从粘贴板导入</em></button>
  85.     `);
  86.     function exoprt() {
  87.         
  88.         var names = GM_listValues();

  89.         if (names) {

  90.             var exoprtJson = {};
  91.             for (var i = 0; i < names.length; i++) {
  92.                 exoprtJson[names[i]] = GM_getValue(names[i], null)
  93.             }

  94.             var exoprtValue = JSON.stringify(exoprtJson)
  95.             console.log("导出到粘贴板:", exoprtValue)
  96.             navigator.clipboard.writeText(exoprtValue).then(() => {
  97.                 window.confirm("本地名单列表:\n" + exoprtValue + "\n已复制到粘贴板")
  98.             })
  99.         }
  100.     }
  101.     var exportBtn = document.getElementById("exportbtn");
  102.     // console.log(button1);
  103.     // 在js页面获取HTML的按钮函数
  104.     exportBtn.onclick = exoprt;

  105.     function OnImportClick() {
  106.         navigator.clipboard.readText().then((clipText) => {
  107.             console.log("从粘贴板导入:", clipText)
  108.             if (!clipText) {
  109.                 window.confirm("未读取到数据,请先将名单复制至粘贴板")
  110.             }

  111.             importedJson = JSON.parse(clipText)
  112.             if (!importedJson) {
  113.                 window.confirm('导入格式不正确,按照{"用户名":"标记名",...}格式导入')
  114.             }

  115.             for (var item in importedJson) {
  116.                 var localValue = GM_getValue(item, '')
  117.                 if (!localValue || localValue.indexOf(importedJson[item]) === -1) {
  118.                     localValue += ("," + importedJson[item])
  119.                     GM_setValue(item, localValue)
  120.                     console.log('导入成功', item, localValue)
  121.                 }
  122.             }
  123.         })
  124.     }
  125.     var importBtn = document.getElementById("importbtn");
  126.     // console.log(button1);
  127.     // 在js页面获取HTML的按钮函数
  128.     importBtn.onclick = OnImportClick;
  129. }

  130. function ImportButton_Appender(nvDiv) {
  131.     nvDiv.innerHTML= nvDiv.innerHTML.concat(`
  132.     <button type="button" name="blacklistimport_btn" id="importbtn" value="true" style="float: right; margin: 5px 8px 0;" class="pn vm" ><em>从粘贴板导入</em></button>
  133.     `);
  134.    
  135. }

  136. S1_Reply_Blocker();



复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

     
发表于 2022-1-27 21:29 | 显示全部楼层
问题:
3.如果标记的太多 展示会不正常
回复

使用道具 举报

     
发表于 2022-1-27 21:41 来自手机 | 显示全部楼层
Nanachi 发表于 2022-1-27 19:14
我试了一下没办法识别,你再试试?

Github

电脑关了,右上角有个raw

https://gist.github.com/TomoeMami/9b127b61e7896363c7da81237a3ef8a3/raw/de6a19f7e072c748095b865f7b4745b30096c5b8/S1UserMarker.js
回复

使用道具 举报

     
发表于 2022-1-27 21:42 | 显示全部楼层
Nanachi 发表于 2022-1-27 16:33
上一个帖子已经讨论过了,共享之后容易被小团体操纵。

https://bbs.saraba1st.com/2b/forum.php?mod=v ...

虽然但是,理论是正确的,但你引用的这个用户本身就是某群体的
回复

使用道具 举报

     
发表于 2022-1-27 21:43 来自手机 | 显示全部楼层
Mark

—— 来自 Meizu 16th, Android 8.1.0上的 S1Next-鹅版 v2.5.2
回复

使用道具 举报

头像被屏蔽
     
发表于 2022-1-27 21:59 来自手机 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

     
 楼主| 发表于 2022-1-27 22:07 | 显示全部楼层
本帖最后由 Nanachi 于 2022-1-27 22:25 编辑
wugui14 发表于 2022-1-27 21:29
问题:
3.如果标记的太多 展示会不正常

我尝试了一下你的代码,稍作修改就可行了。但是由于之前的标记直接在用户名区域标记,因此一旦标记长了确实会导致显示出现问题,挤不下。

已上传GreasyFork



  1. // ==UserScript==
  2. // @name         S1 User Marker-With Export/Import Function
  3. // @namespace    http://tampermonkey.net/
  4. // @version      1.1
  5. // @description  Mark certain user
  6. // @ogirin_author       冰箱研会长、masakahaha、Nanachi
  7. // @author wugui14
  8. // @match        https://bbs.saraba1st.com/2b/*
  9. // @grant GM_getValue
  10. // @grant GM_setValue
  11. // @grant        GM_deleteValue
  12. // @grant GM_listValues
  13. // @license GPL-V3
  14. // ==/UserScript==
  15. function getElementByXpath(path) {
  16.     return document.evaluate(path, document, null,
  17.         XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
  18. }

  19. function Blockbutton_Appender(HtmlDiv, Block_Target, Origin_Name,PostNumber) {
  20.     var Block_status = '';
  21.     var status_text = GM_getValue(Origin_Name,null) ? '取消标记' : '标记此人';
  22.     if (GM_getValue(Origin_Name,null)) {
  23.         Block_Target.style='color:red';
  24.         Block_Target.innerText = Block_Target.innerText + '#' + GM_getValue(Origin_Name);
  25.     }
  26.     function buttonClick(){
  27.         console.log('test');
  28.         console.log(Origin_Name);
  29.         if (GM_getValue(Origin_Name,null)) {
  30.             console.log('1');
  31.             GM_deleteValue(Origin_Name);
  32.             window.location.reload();
  33.         } else {
  34.             console.log('2');
  35.             var tag = prompt("输入自定义标签","");
  36.             if (tag != undefined && tag != "") {
  37.                 console.log(Origin_Name);
  38.                 //                blockedList.set(Block_Target, tag);
  39.                 GM_setValue(Origin_Name, tag);
  40.                 window.location.reload();
  41.             }
  42.         }
  43.     }
  44.     var StrPostNumber = PostNumber.toString();
  45.     HtmlDiv.innerHTML = HtmlDiv.innerHTML.concat(`
  46.     <table class="tfm" cellspacing="0" cellpadding="0">
  47.     <tbody><tr>
  48.     <td>
  49.     <button type="button" name="blacklistsubmit_btn" id="blockbtn`,StrPostNumber,`" value="true" class="pn vm" ><em>`,status_text,`</em></button>
  50.     </td>
  51.     </tr>
  52.     </tbody></table>`);
  53.     var button1 = document.getElementById("blockbtn"+PostNumber.toString());
  54.     console.log(button1);
  55.     // 在js页面获取HTML的按钮函数
  56.     button1.onclick = buttonClick;
  57. }

  58. function S1_Reply_Blocker() {
  59.     var PostLists = getElementByXpath(`//div[@id='postlist']`);
  60. //    console.log(PostLists)
  61.     if (PostLists) {
  62.         var PostCounter = 1;
  63.         while (getElementByXpath(`//div[@id='postlist']/div[${PostCounter}]`)) {
  64.             var PostAuthor = getElementByXpath(`//div[@id='postlist']/div[${PostCounter}]/table/tbody/tr[1]/td[1]/div/div[1]/div/a`);
  65.             if(PostAuthor){
  66.             if(PostAuthor.innerText){
  67.             var origin_author = PostAuthor.innerText;
  68.             }
  69.             var PostAruthorColumn = getElementByXpath(`//div[@id='postlist']/div[${PostCounter}]/table[1]/tbody[1]/tr[1]/td[1]/div[1]`);
  70.             if (PostAruthorColumn) {
  71.                 Blockbutton_Appender(PostAruthorColumn, PostAuthor,origin_author,PostCounter);
  72.             }}
  73.             PostCounter = PostCounter + 1;
  74.         }
  75.     }

  76.     var Qmenu = getElementByXpath(`//div[@id='nv']`);

  77.     if (Qmenu) {
  78.         ExportButton_Appender(Qmenu)
  79.         // ImportButton_Appender(Qmenu)
  80.     }

  81. }

  82. function ExportButton_Appender(nvDiv) {
  83.     nvDiv.innerHTML= nvDiv.innerHTML.concat(`
  84.     <button type="button" name="blacklistexport_btn" id="exportbtn" value="true" style="float: right; margin: 5px 8px 0;" class="pn vm" ><em>导出标记</em></button>
  85.     <button type="button" name="blacklistimport_btn" id="importbtn" value="true" style="float: right; margin: 5px 8px 0;" class="pn vm" ><em>从粘贴板导入</em></button>
  86.     `);
  87.     function exoprt() {

  88.         var names = GM_listValues();

  89.         if (names) {

  90.             var exoprtJson = {};
  91.             for (var i = 0; i < names.length; i++) {
  92.                 exoprtJson[names[i]] = GM_getValue(names[i], null)
  93.             }

  94.             var exoprtValue = JSON.stringify(exoprtJson)
  95.             console.log("导出到粘贴板:", exoprtValue)
  96.             navigator.clipboard.writeText(exoprtValue).then(() => {
  97.                 window.confirm("本地名单列表:\n" + exoprtValue + "\n已复制到粘贴板")
  98.             })
  99.         }
  100.     }
  101.     var exportBtn = document.getElementById("exportbtn");
  102.     // console.log(button1);
  103.     // 在js页面获取HTML的按钮函数
  104.     exportBtn.onclick = exoprt;

  105.     function OnImportClick() {
  106.         navigator.clipboard.readText().then((clipText) => {
  107.             console.log("从粘贴板导入:", clipText)
  108.             if (!clipText) {
  109.                 window.confirm("未读取到数据,请先将名单复制至粘贴板")
  110.             }

  111.             var importedJson = JSON.parse(clipText)
  112.             if (!importedJson) {
  113.                 window.confirm('导入格式不正确,按照{"用户名":"标记名",...}格式导入')
  114.             }

  115.             for (var item in importedJson) {
  116.                 var localValue = GM_getValue(item, '')
  117.                 if (!localValue || localValue.indexOf(importedJson[item]) === -1) {
  118.                     localValue += ("/" + importedJson[item])
  119.                     GM_setValue(item, localValue)
  120.                     console.log('导入成功', item, localValue)
  121.                 }
  122.             }
  123.         })
  124.     }
  125.     var importBtn = document.getElementById("importbtn");
  126.     // console.log(button1);
  127.     // 在js页面获取HTML的按钮函数
  128.     importBtn.onclick = OnImportClick;
  129. }

  130. function ImportButton_Appender(nvDiv) {
  131.     nvDiv.innerHTML= nvDiv.innerHTML.concat(`
  132.     <button type="button" name="blacklistimport_btn" id="importbtn" value="true" style="float: right; margin: 5px 8px 0;" class="pn vm" ><em>从粘贴板导入</em></button>
  133.     `);

  134. }

  135. S1_Reply_Blocker();
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|上海互联网违法和不良信息举报中心|网上有害信息举报专区|962110 反电信诈骗|举报电话 021-62035905|Stage1st ( 沪ICP备13020230号-1|沪公网安备 31010702007642号 )

GMT+8, 2025-1-31 13:51 , Processed in 0.120695 second(s), 6 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表