几行代码轻松撸腾讯云的学生机 技术文章
前言
腾讯云学生机老早就有了,那时候学生认证下,代金卷发下来了。哪知道腾讯的学生机策略变了,每天12:00 200台机子限量抢购,恶心!
现在手中的阿里云和腾讯云对我来说不够用,找个以前同学借个号认证就行了。表示就差腾讯云没抢到。
一开始我听群里的基佬们说好抢啊,12点到了不用刷新网页就可以抢了。然而当天中午抢购的时候事实上不是他们说得那样...特么需要刷新一次网页才能抢,而且1S之内特么全没了??这尼玛怎么抢啊?各种暴走。
看我如何XXOO翻腾讯云的辣鸡抢购
可以看到鼠标放在[red]今日已抢完[/red]那里是一个禁用标志,那么ctrl+shift+I 在dev-tool里面可以很清楚看到如下代码:
<button type="button" hotrep="qcact.campus.getVoucherBtn" class="button J-gotoAuth" data-title="今日已抢完" disabled="disabled">今日已抢完</button>
我们只需要去除掉这段 :disabled="disabled" ,现在可以点击领取了,but ,
有弹窗,无非就是没到时间,没发抢购(抛出异常)。然后在Network窗口看见,有参数接收反馈,这意味并不需要手动刷新网页。只要写个定时函数就行了。
那么上面所说到的抛出异常,也就是那个弹窗,给隐藏,这样可以狂点那个按钮了,审查元素后,得知id="dialog-event-xxxxxxx"。右键hide即可。
控制台写如下代码:
var c=0; function iiong() { $(document).ready(function(){ $(".J-gotoAuth").trigger("click"); }); } setInterval("iiong()","500");这样,在11点58分钟开始运行这段代码,就等待抢到吧。。。。也不知道为毛要搞个抢购,要想真正的福利学生,直接让需要的学生在学校里面通过学校向你们申请,这不是更能验证身份么。。。真的是很蛋疼的抢购,大部分抢到的都是些‘假学生’,运营脑袋是不是有gain!
好了,今天就比比到这里,改日再来;
声明:禁止用此方法抢到的机器干违法乱纪的勾当,出事儿别找我。。。我不负责,我也负不起责,一天天都快烦死了。
详细分析如何实现图片懒加载(lazyload),提高用户体验 代码人生
-
懒加载的意义(为什么要使用懒加载)
-
原理
-
代码
懒加载的意义(为什么要使用懒加载)
对页面加载速度影响最大的就是图片,一张普通的图片可以达到几M的大小,而代码也许就只有几十KB。当页面图片很多时,页面的加载速度缓慢,几S钟内页面没有加载完成,也许会失去很多的用户。
所以,对于图片过多的页面,为了加速页面加载速度,所以很多时候我们需要将页面内未出现在可视区域内的图片先不做加载, 等到滚动到可视区域后再去加载。这样子对于页面加载性能上会有很大的提升,也提高了用户体验。
原理
将页面中的img标签src指向一张小图片或者src为空,然后定义data-src(这个属性可以自定义命名,我才用data-src)属性指向真实的图片。src指向一张默认的图片,否则当src为空时也会向服务器发送一次请求。可以指向loading的地址。
注:图片要指定宽高
<img src="default.jpg" data-src="http://ww4.sinaimg.cn/large/006y8mN6gw1fa5obmqrmvj305k05k3yh.jpg" />
当载入页面时,先把可视区域内的img标签的data-src属性值负给src,然后监听滚动事件,把用户即将看到的图片加载。这样便实现了懒加载。
代码
在写代码前,需要了解各种高度。可以参考这篇文章:https://mrxn.net/codelife/jQuery-css-scrollTop-scrollLeft-offsetLeft.html
<head> <meta charset="UTF-8"> <title>Document</title> <style> img { display: block; margin-bottom: 50px; width: 400px; height: 400px; } </style> </head> <body> <img src="default.jpg" data-src="http://ww4.sinaimg.cn/large/006y8mN6gw1fa5obmqrmvj305k05k3yh.jpg" alt=""> <img src="default.jpg" data-src="http://ww4.sinaimg.cn/large/006y8mN6gw1fa5obmqrmvj305k05k3yh.jpg" alt=""> <img src="default.jpg" data-src="http://ww1.sinaimg.cn/large/006y8mN6gw1fa7kaed2hpj30sg0l9q54.jpg" alt=""> <img src="default.jpg" data-src="http://ww1.sinaimg.cn/large/006y8mN6gw1fa7kaed2hpj30sg0l9q54.jpg" alt=""> <img src="default.jpg" data-src="http://ww4.sinaimg.cn/large/006y8mN6gw1fa5obmqrmvj305k05k3yh.jpg" alt=""> <img src="default.jpg" data-src="http://ww4.sinaimg.cn/large/006y8mN6gw1fa5obmqrmvj305k05k3yh.jpg" alt=""> <img src="default.jpg" data-src="http://ww4.sinaimg.cn/large/006y8mN6gw1fa5obmqrmvj305k05k3yh.jpg" alt=""> <img src="default.jpg" data-src="http://ww4.sinaimg.cn/large/006y8mN6gw1fa5obmqrmvj305k05k3yh.jpg" alt=""> <img src="default.jpg" data-src="http://ww1.sinaimg.cn/large/006y8mN6gw1fa7kaed2hpj30sg0l9q54.jpg" alt=""> <img src="default.jpg" data-src="http://ww4.sinaimg.cn/large/006y8mN6gw1fa5obmqrmvj305k05k3yh.jpg" alt=""> <img src="default.jpg" data-src="http://ww4.sinaimg.cn/large/006y8mN6gw1fa5obmqrmvj305k05k3yh.jpg" alt=""> </body>
JavaScript
<script> var num = document.getElementsByTagName('img').length; var img = document.getElementsByTagName("img"); var n = 0; //存储图片加载到的位置,避免每次都从第一张图片开始遍历 lazyload(); //页面载入完毕加载可是区域内的图片 window.onscroll = lazyload; function lazyload() { //监听页面滚动事件 var seeHeight = document.documentElement.clientHeight; //可见区域高度 var scrollTop = document.documentElement.scrollTop || document.body.scrollTop; //滚动条距离顶部高度 for (var i = n; i < num; i++) { if (img[i].offsetTop < seeHeight + scrollTop) { if (img[i].getAttribute("src") == "default.jpg") { img[i].src = img[i].getAttribute("data-src"); } n = i + 1; } } } </script>
jQuery
<script> var n = 0, imgNum = $("img").length, img = $('img'); lazyload(); $(window).scroll(lazyload); function lazyload(event) { for (var i = n; i < imgNum; i++) { if (img.eq(i).offset().top < parseInt($(window).height()) + parseInt($(window).scrollTop())) { if (img.eq(i).attr("src") == "default.jpg") { var src = img.eq(i).attr("data-src"); img.eq(i).attr("src", src); n = i + 1; } } } } </script>
使用节流函数进行性能优化
如果直接将函数绑定在scroll事件上,当页面滚动时,函数会被高频触发,这非常影响浏览器的性能。
我想实现限制触发频率,来优化性能。
节流函数:只允许一个函数在N秒内执行一次。下面是一个简单的节流函数:
// 简单的节流函数 //fun 要执行的函数 //delay 延迟 //time 在time时间内必须执行一次 function throttle(fun, delay, time) { var timeout, startTime = new Date(); return function() { var context = this, args = arguments, curTime = new Date(); clearTimeout(timeout); // 如果达到了规定的触发时间间隔,触发 handler if (curTime - startTime >= time) { fun.apply(context, args); startTime = curTime; // 没达到触发间隔,重新设定定时器 } else { timeout = setTimeout(fun, delay); } }; }; // 实际想绑定在 scroll 事件上的 handler function lazyload(event) {} // 采用了节流函数 window.addEventListener('scroll',throttle(lazyload,500,1000));
算法学习之处-运用基本的逻辑与数学知识进行简单的循环遍历 代码人生
假设有这么一道数学题:
求第2333个能被2或者被3整除的正整数是…?
举例:(被2或者被3整除的正整数依次是:2,3,4,6,8,9,10,12,14,15,16,18…)
我们也可以使用最基本的数学方法来算:
这个时候,数字比较大,用数学的方法就比较吃力费时了,当然,不排除你是个牛人。运算速度超常人,可以不用往下看了,渣渣 -_-|| 颤抖吧!
首先是来看看PHP版:
<?php
function getResult($times){
$i = 0;
$n = 1;
while(true){
if(!($n%2) || !($n%3)){
$i++;
if($i == $times){
return $n;
}
}
$n++;
}
}
echo getResult(2333);
?>
然后看看Java版:
public class Main { public static void main(String[] args) { int cnt=0,num=1; while(true) { if(num%2==0||num%3==0)cnt++; if(cnt==2333)break; num++; } System.out.println(num); } }
Python版本:
[i for i in range(0,8000) if not(i%2 and i%3)][2333]
再看看C++:
//O(1)复杂度,不解释 #include <iostream> using namespace std; bool Check(int m, int n){ if(m%2 ==0 || m%3 == 0){ return m/2 + m/3 - m/6 ==n; } return false; } int Get(int n){ int top = (n-3)/4*6; while(!Check(top, n))//最多循环10次 ++top; return top; } int main(){ cout<<Get(2333)<<endl; }
还有Go语言版本:
func main() {
var x int
c := 2333
//c = x/2+ x/3-x/6==>x=2*c/3 + c%2
x = 3*c/2 + c%2
fmt.Println(x)
}
javascript版本:
var arr = []; var a = 0; while(arr.length < 2334) { a++; if (a % 3 == 0 || a % 2 == 0) { arr.push(a); } } console.log(arr[2332]);php版本呢,我自己还写了个利用数组的方法:
把成立的结果放在数组里(把范围限制在4000以下,不然一直循环下去没完没了-_-|),key按照自增排列,最后foreach遍历,遍历到key值为2333是停止遍历并且把结果输出,但是这个方法貌似很不好,只是本人确实水平不好,正在学习中...哈哈下次再见。
HTML5新特性Bug:这12行代码分分钟让你浏览器崩溃iPhone重启 代码人生
使用这十二行JavaScript代码能让firefox、chrome、safari等众多浏览器崩溃,甚至让iPhone重启?!
起因
今天刷推特的时候发现Cyber Security@cyber__sec的推文让人眼前一亮:
Crash firefox, chrome, safari browsers, and also restart iPhone using this javascript code. #dos #0day #exploit //使用下面这段JavaScript代码能让firefox,chrome,safari浏览器崩溃,而且还能让iPhone重启。
完整HTML代码如下:
<html> <body> <script> var total=""; for (var i=0;i<1000000;i++) { total= total+i.toString(); history.pushState(0,0,total); } </script> </body> </html>
demo:(温馨提示:请保存浏览器其它窗口的编辑任务)
http://api.mrxn.net/demo.html (点击一下,又不会怀孕!)
接来下会发生什么?
点开以后,我的状态是这样的:
如果你是PC端用户,点开链接以后,电脑CPU内存极有可能一路狂飙直至浏览器崩溃卡死!
如果你是移动端(安卓、iPhone)用户,点开链接以后你的浏览器会闪退!在微博、微信客户端点开链接同样会闪退。至于在推文中提到的让iPhone重启,这一现象倒是没有出现。22:49 修正:iPhone用Safari打开之后链接之后,手机注销重启了!…
思考
这是Bug还是0day?为什么会有这一现象?如何实现的?
有哪些比较有意思的利用姿势?(我先来个:当在执行MITM中间人攻击的时候,可以注入这一段js,来个恶搞整蛊。然后都懂的...)
欢迎大家在评论中发表自己的观点
简单的js代码让你的鼠标拥有动态文字跟随 代码人生
效果呢,如上图所示,具体效果可以看我博客就知道了,我把代码贴出来,需要的,喜欢折腾的慢慢去折腾哈,你也考虑把文本弄成随机变换的。
// ENTER TEXT BELOW. CAN *NOT* INCLUDE NORMAL HTML CODE. var text='W elcom e to M rxn\'s B log *_*' ; var delay=30; // SPEED OF TRAIL var Xoff=10; // PIXEL COUNT FROM THE LEFT OF THE CURSOR (- VALUES GO TO LEFT) var Yoff=-25; // PIXEL COUNT FROM THE TOP OF THE CURSOR (- VALUES GO UP) var txtw=9; // AMOUNT OF PIXEL SPACE EACH CHARACTER OCCUPIES var beghtml='<font color="#FF0000"><b>'; // OPTIONAL HTML CODE THAT EFFECTS WHOLE TEXT STRING SUCH AS FONT COLOR, SIZE, ETC. var endhtml='</b></font>'; // END HTML CODE. MOSTLY USED IF ABOVE SETTING IS USED. //********** NO NEED TO EDIT BELOW HERE **********\\ ns4 = (navigator.appName.indexOf("Netscape")>=0 && document.layers)? true : false; ie4 = (document.all && !document.getElementById)? true : false; ie5 = (document.all && document.getElementById)? true : false; ns6 = (document.getElementById && navigator.appName.indexOf("Netscape")>=0 )? true: false; var txtA=new Array(); text=text.split(''); var x1=0; var y1=-1000; var t=''; for(i=1;i<=text.length;i++){ t+=(ns4)? '<layer name="txt'+i+'" top="-100" left="0" width="'+txtw+'" height="1">' : '<div id="txt'+i+'" style="position:absolute; top:-100px; left:0px; height:1px; width:'+txtw+'; visibility:visible;">'; t+=beghtml+text[i-1]+endhtml; t+=(ns4)? '</layer>' : '</div>'; } document.write(t); function moveid(id,x,y){ if(ns4)id.moveTo(x,y); else{ id.style.left=x+'px'; id.style.top=y+'px'; }} function animate(evt){ x1=Xoff+((ie4||ie5)?event.clientX+document.body.scrollLeft:evt.pageX); y1=Yoff+((ie4||ie5)?event.clientY+document.body.scrollTop:evt.pageY); } function getidleft(id){ if(ns4)return id.left; else return parseInt(id.style.left); } function getidtop(id){ if(ns4)return id.top; else return parseInt(id.style.top); } function getwindowwidth(){ if(ie4||ie5)return document.body.clientWidth+document.body.scrollLeft; else return window.innerWidth+pageXOffset; } function movetxts(){ for(i=text.length;i>1;i=i-1){ if(getidleft(txtA[i-1])+txtw*2>=getwindowwidth()){ moveid(txtA[i-1],0,-1000); moveid(txtA[i],0,-1000); }else moveid(txtA[i], getidleft(txtA[i-1])+txtw, getidtop(txtA[i-1])); } moveid(txtA[1],x1,y1); } window.onload=function(){ for(i=1;i<=text.length;i++)txtA[i]=(ns4)?document.layers['txt'+i]:(ie4)?document.all['txt'+i]:document.getElementById('txt'+i); if(ns4)document.captureEvents(Event.MOUSEMOVE); document.onmousemove=animate; setInterval('movetxts()',delay); }
判断是否成功将Jquery库引入,如果没有成功引入则引入本地Jquery库 代码人生
这里我用的是引入emlog的主题/插件本地Jquery库做的例子。多了就不说了,直接上代码:
<script src=http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js></script> <script type="text/javascript"> //<![CDATA[ //判断是否成功将Jquery库引入,如果没有成功引入则引入本地Jquery库 if (typeof jQuery == 'undefined') {document.write("<script type=\"text/javascript\" src=\"https://mrxn.net/content/templates/MrxnWeb/js/jquery.min.js\"><\/script>");} //]]> </script>
或者有更短一点的:
<script src=http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js></script> <script type="text/javascript"> //<![CDATA[ //判断是否成功将Jquery库引入,如果没有成功引入则引入本地Jquery库 !window.jQuery && document.write("<script type=\"text/javascript\" src=\"https://mrxn.net/content/templates/MrxnWeb/js/jquery.min.js\"><\/script>"); //]]> </script>
利用d3.js对大数据资料进行可视化分析 网络安全
作者: Anthr@X [email protected]
0x00 背景
对于前段时间流出的QQ群数据大家想必已经有所了解了,处理后大小将近100G,多达15亿条关系数据(QQ号,群内昵称,群号,群内权限,群内性别和年龄)和将近9000万条群信息(群号,群名,创建时间,群介绍),这些数据都是扁平化的2维表格结构,直接查询不能直接体现出用户和群之间的直接或者间接关系。通过数据可视化,可以把扁平结构的数据作为点和线连接起来,从而更加直观的显示出来从而进行分析。
d3.js是一个近年来推出的基于javascript的数据展示库,全称为Data Driven Document, 在浏览器数据展示领域的地位类似于通用js框架里的jQuery。d3.js的官网是d3js.org,大家可以在上面看到很多例子和应用。d3.js也是图形数据库neo4j所内置的数据展示工具。
说到图形数据库,其实正确的翻译应该是图数据库,图即所谓的Graph,来自于数学里的图论,比如四色定理和推销员过桥的问题(著名的NP问题之一)。图数据库着重于数据之间的关联和属性,对于关系错综复杂的关系分析效率很高。例如,我想知道谁是我朋友的朋友,并且他们有哪些朋友也认识我。对于这种问题,普通关系型数据库的计算复杂度是O(N^c)左右或者更高,N为选择范围的数据集合大小,你好友数量加上好友的好友的数量等,c为关系层数。图数据库的计算复杂度在O(N^2)左右或者更低,但是基本不会超过O(N^2)。图数据库对于复杂关系数据查询起来效率高的主要原因是在数据输入的时候就已经对关系进行了处理和索引,这样做在查询的时候具有很高的效率,但是在数据导入的时候会很慢。QQ群的15亿个关系在向图数据库neo4j里导入的时候花了3天都没弄完,也没有进度提示,所以后来我直接放弃了。
0x01 数据处理
在QQ群和群成员关系里面,对于层数我是这么定义的:
第1层:目标QQ加入的所有群 第2层:目标QQ加入的所有群的所有成员 第3层:目标QQ加入的所有群的所有成员加入的所有群 . . .
大家可以看出这样的查询是可以递归的,假设每个QQ号所加入的群数量和每个群的成员数量为N,那么查询3层数据时总计算量为N*N*N
=n^3,所以当查询层数为c层的时候,计算复杂度是N^c。
前面说过,图数据库的计算复杂度一般在N^2以下,所以当使用普通的关系型数据库的时候,如果查询的层数不多,效率和图数据库比起来差不多,加上关系数据库自带的便于管理和导入导出的属性,所以我还是选择了mysql数据库。
对于QQ和QQ群之间的关系,每个QQ号都能加入群,一个群里也有很多QQ,基本都在几十到几百人,所以两个QQ号在同一个群里不一定代表他们的关系很紧密,换句话说QQ和QQ群之间的关系相对于QQ好友而言相对较弱。但是这并不代表我们从中不能分析出有用的资料,俗话说的好,大数据就像一座金矿,只有用力挖才能挖到金子。
d3.js支持多种数据格式,比如JSON,XML,CSV,HTML等,因为PHP的数组可以很简单的转换为JSON格式,所以我选择用PHP写API来获取JSON数据。QQ和QQ群是一种典型的图数据的应用,QQ和QQ群作为节点(node),QQ加入了哪些群作为关系(link),d3.js内置了一个功能很强大的内建布局,叫做Force-Directed Graph(受力导向图),后面简称为force。force布局模拟了一些基本的物理粒子原理,比如引力和斥力(确切的说是模拟了电磁力和引力,在离的远的时候会互相吸引,在离的近的时候斥力急剧增加),并且可以调节力的大小和受力距离等等,可以说是自由度相当高。关于d3.js的force布局,在官网有详细的API和不少例子,这里我就不贴代码了。
在force布局里面,数据源的JSON可以有很多种不同的格式和属性,但是基本格式如下:
{"nodes":[{"num":10001,type:"qq"},{"num":12345678,type:"qun"}],"links":[{"source":"10001","target":"12345678","auth":1,"nick":"pony"}]}
其中nodes数组对应的是节点列表,links对应的是关系列表。
每个节点可以有很多自定义属性,在d3.js可以针对每个节点存取节点的属性,比如我定义num是QQ号或者群号,type代表节点是QQ还是群,另外我在js里设定在type==‘qun’的时候显示群的图标,是qq的时候显示qq的图标。关系里面默认的属性有source和target,分别对应一个关系的两头,默认情况下关系里面的source和target对应的数字是节点在节点数组里面的位置index。但是我自定义成了qq号和群号。另外你也可以定义其他属性,比如auth代表这个QQ号在群里的权限,nick是群昵称。
对于QQ群这样的关系来说,基本上在第4层和以上的QQ和群的关系就比较弱了,所以为了提高查询速度和减少节点数量,我只查询2层关系(少么?不少,要想想有些群有超过500人……)。
首先,d3.js需要在浏览器里面运行,我的首选是Google Chrome,V8引擎的效率果然不错,在节点和关系不多的时候基本感觉不到延迟,后来在FF和IE11里面测试了一次,FF比Chrome卡一半左右,IE的话我只能呵呵了……
先拿小马哥做个测试,QQ号是霸气的10001。当d3.js导入完数据JSON的时候,各种节点会在屏幕上乱飞几秒钟,直到他们的力达到一个稳定的平衡点。结果如下:
说明:
企鹅图标的节点代表QQ,群图标的节点是群(废话么)。 每条线代表一个关系,一个QQ可以加入N个群,一个群也可以有N个QQ加入。 线的颜色分别代表: 土豪金:群主 狗腿绿:群管理员 屌丝蓝:群成员
大家也可以看到,群主和管理员的关系线也比普通的群成员长一些,这是为了突出群内的重要成员的关系。
图标旁边自动标注了QQ号和群号,如果有的话还有群名。没有在QQ号旁边标注昵称是因为很多人加入不同的群使用的是不同昵称,所以把昵称放到了其他的地方显示。
在下图中大家可以隐约的看到,所有的关系都是以QQ 10001为起点的。
在图上节点是可以拖拽的,拖拽后会固定在你释放的地方。我们把几个群稍微拖的分开一点,关系就一目了然了
这个时候我们可以看到在目标的QQ群里也有很多共同QQ号,比如有些QQ号同时加入了2,3个群。群名显示的都是各种产品开发讨论群,这些同时加入2,3个产品群的人估计不是产品经理就是主管吧……
鼠标悬停到群图标上可以看到群的详细信息(如果有的话)
因为很多人在不同群里的昵称不一样,所以群内昵称等信息就只能放到link上面了,因为线比较细,所以鼠标比较难对准,这个功能还待修改。
这个家伙和小马哥一起同时在3个群里,好基友?
小马哥的QQ群信息展示完了,下面我们来看看更加实际的应用,比如把某圈子里的人找出来。我们先从某土豪大黑阔大牛的QQ号入手:
初始数据好多……此大黑阔加入的群够杂的,不过就是因为杂所以才能更深入的了解一个人的所有喜好。看看群名神马的,我好像看到了dota,XX国际俱乐部,web技术交流,XXsec等群……充分说明了此人……是个屌丝技术宅大黑阔,XX国际俱乐部又似乎带着那么种高大上的感觉……
图中错综复杂的各种关系组成了一朵朵盛开的菊花,向我们诉说着他的历史……
为了理清他那不堪回首的过去和关系网,我特地把浏览器窗口拖到第二个屏幕上,然后把群挨个分开。为了保护当事人的隐私,这张图我打码了。
这张图比较宽,建议大家下载下来放大看
0x02 总结
假如把层数扩展到4层,不知能否筛选出中国所有黑阔的QQ号呢?至少我已经在这张图里看到了很多熟悉的名字和号码。
腾讯总是说漏洞早已修复,不存在问题了,广大网民放心,但实际上信息泄露这种事情,岂是你漏洞修复好了就结束了的事情?
注:转载自乌云文库,原作者为QQ群关系查询站的站长 --- insight-labs ,原文地址:http://drops.wooyun.org/tips/823
自定义百度网盘分享密码 (Javascript) 杂七杂八
转载自:GIUEM
首先看下效果吧。(一不小心就开车了)
链接: http://pan.baidu.com/s/1gf4jcQZ 密码: mrxn
原理:
分析代码发现,百度网盘的自定义密码是在本地生成的
这也就给了我们玩耍的机会。
实现方法:
不二 和 LiesAuer 他们都是采用构造请求的方法,我觉得不够 hacker,而且不太方便。
所以我决定采用 JS 的方式修改密码。
方法很简单:修改 makePrivatePassword 这一函数即可。
具体代码
说明:代码可以转载,但请不要说是你原创之类的话!!!
压缩版
javascript:require(["function-widget-1:share/util/service/createLinkShare.js"]).prototype.makePrivatePassword=function(){return prompt("请输入自定义的密码","1234")}原版
require(["function-widget-1:share/util/service/createLinkShare.js"]).prototype.makePrivatePassword = () => { return prompt("请输入自定义的密码", "1234") }
使用方法 :
别急,你可别复制走代码就用了,一不小心就会出现这样的错误:
Uncaught Error: Cannot find module `function-widget-1:share/util/service/createLinkShare.js`(…)
首先,选择要分享的文件,点击分享按钮。 这时候,按 F12 打开控制台,切换至 Console ,输入代码按回车即可。
当然,你也可以存为书签,点一下书签。 然后点击创建私密链接,会弹出输入框,输入密码即可!
注意使用代码前要先点一下 分享 按钮,相关模块才会载入,这时候用代码才有效果。

密码类型
必须是 4 个字符。
如:
abcd
1234
ab12
啊a (中文加一个数字或字母)
其他类型请各位自己探索,可在下方给我留言。
好像如果密码有中文,第一次访问时会提示错误,刷新一下才正常。
emlog侧边栏日历显示正在加载中解决方法(包括https和http) emlog
这几天在论坛看到王老师 @王语双 发帖说,他的emlog内页日历显示不出来,一直显示 --加载中(包括https和http),却一直显示不出来,如图:
王老师的是http网站,我的是https的,也是加载不出来,在论坛看到的答复中知道大概是这三点的原因造成的:
- js冲突;
- 网络问题;
- 301跳转问题;
王老师的情况最后发现是属于网络问题,即有时候网络高峰期的时候,移动网络有可能出现这种情况;
js冲突一般在浏览器的开发者工具条里面可以看出来,这里不做讨论;
网络问题嘛,没法解决,自己换服务商吧!
301跳转问题:
没做好301跳转的,比如没有做mrxn.net 301跳转到 www.mrxn.ne t的时候,访问mrxn.net 就有可能出现这种情况,一般在开发者工具条里面有提示:
XMLHttpRequest cannot load http://www.wys.me/?action=cal&randnum=0.19238296267576516. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://wys.me' is therefore not allowed access.
我的站点属于https加密的类型,所以提示的就是如下信息:
Mixed Content: The page at 'https://mrxn.net/' was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint 'https://mrxn.net/?action=cal&randnum=0.8051533969119191'. This request has been blocked; the content must be served over HTTPS.大概意思就说,这个页面使用的是https加载https://mrxn.net,但是请求里面混杂非加密的请求
https://mrxn.net?action=cal&randnum=0.8051533969119191,因此这个请求被服务器阻断了,因为服务器要求请求必须是https加密的。
我在论坛里面回帖说了一下我的https也不加载,得到了基友hackhp @hackhp 的如下答复:
修改/include/lib/function.base.php里面的
return 'http://' . $_SERVER['HTTP_HOST'] . $matches[0];
修改为:
return '//' . $_SERVER['HTTP_HOST'] . $matches[0];我做了测试,的确修改后就可以加载了
函数的注释显示是
/**
* 获取站点地址(仅限根目录脚本使用,目前仅用于首页ajax请求)
*/
也就是说这个函数是用于ajax请求获取网站地址的,那么,修改成如下形式也是可以的:
return 'https://' . $_SERVER['HTTP_HOST'] . $matches[0];结果证明是可行的。
emlog侧边栏日历显示正在加载中解决方法(包括https和http)这个小问题在此小计就结束了,在此记录分享可能需要的朋友,希望可以帮到你们。
漂亮的alert美化插件sweet-alert.js对话框效果 代码人生
Sweet Alert 是 JavaScript Alert的一个漂亮替换。SweetAlert会自动居中对齐页面上看起来很棒不管您使用的是台式电脑,手机或平板电脑。它甚至高度可定制。
同时支持设置图片在alert对话框里面哦!
要使用该插件,首先要在html的header中引入以下文件:
< script src = "lib/sweet-alert.min.js" ></ script >
< link rel = "stylesheet" type = "text/css" href = "lib/sweet-alert.css" >
|
最基本的调用方法:
sweetAlert( "Hello world!" );
|
带错误图标的警告框:
sweetAlert( "Oops..." , "Something went wrong!" , "error" );
|
一个带有确认按钮的警告框,点击确认按钮可触发动画:
sweetAlert({
title: "Are you sure?" ,
text: "You will not be able to recover this imaginary file!" ,
type: "warning" ,
showCancelButton: true ,
confirmButtonColor: "#DD6B55" ,
confirmButtonText: "Yes, delete it!" ,
closeOnConfirm: false
}, function (){
swal( "Deleted!" ,
"Your imaginary file has been deleted." ,
"success" );
});
|
可用参数
参数 | 默认值 | 描述 |
title | null(required) | 窗口的名称。可以通过对象的”title”属性或第一个参数进行传递。 |
text | null | 窗口的描述。可以通过对象的”text”属性或第二个参数进行传递。 |
type | null | 窗口的类型。SweetAlert 有4种类型的图标动画:”warning”, “error”, “success” 和 “info”.可以将它放在”type”数组或通过第三个参数传递。 |
allowOutsideClick | false | 如果设置为“true”,用户可以通过点击警告框以外的区域关闭警告框。 |
showCancelButton | false | 如果设置为“true”,“cancel”按钮将显示,点击可以关闭警告框。 |
confirmButtonText | “OK” | 该参数用来改变确认按钮上的文字。如果设置为”true”,那么确认按钮将自动将”Confirm”替换为”OK”。 |
confirmButtonColor | “#AEDEF4” | 该参数用来改变确认按钮的背景颜色(必须是一个HEX值)。 |
cancelButtonText | “Cancel” | 该参数用来改变取消按钮的文字。 |
closeOnConfirm | true | 如果希望以后点击了确认按钮后模态窗口仍然保留就设置为”false”。该参数在其他SweetAlert触发确认按钮事件时十分有用。 |
imageUrl | null | 添加自定义图片到警告框上。必须是图片的完整路径。 |
imageSize | “80×80” | 当设定图片的路径后,你可以设定图片的大小,格式为两个数字中间带个”x”符号。 |
timer | null | 警告框自动关闭的时间。单位是ms。 |
更多关于SweetAlert的内容请参考:https://github.com/t4t5/sweetalert。