前几天为了测试IDM能不能下载P站的图片,装了IDM。之后IDM自动往chrome里添加了一个扩展,用于让IDM接管浏览器的下载行为。这几天我一直没用过这个功能,刚才去素材网站下载一个文件,IDM弹出下载框,我就点了下载,结果电脑马上宕机了几秒钟(画面定格,鼠标键盘操作均无反应),之后好了,我以为就这样了,结果几秒后就陷入了永久宕机,硬盘灯不亮,只有电源灯亮,等待一会儿没有恢复,只好重启电脑。
当时我ps里有4个未保存的文档,幸好重启后ps给自动恢复了3个。
之后我去查了下,发现至少在2013年就存在类似情况引起的死机,而我使用的IDM6.28.6是最新版本,但这个问题仍然存在,可拉倒吧,IDM一生黑。
google出来的相关内容更多,除了chrome+idm这个因素,还有个倾向是win7 64位系统上经常发生此问题。不幸的是我也正好是win7 64位。IDM拜拜~
更新:
4 年后(2021 年)我真香了,买了 IDM 正版,在 Win 10/ Win 11 上使用,没遇到过 IDM 导致的问题。
垃圾IDM导致电脑死机
JavaScript中每个函数都有call()和apply()方法(呼叫和申请 XD),这两个方法都是为了改变函数的this值。简单地说,如果一个对象没有某个方法,但是其他人有,那么就可以用call()或apply()来借用这个方法。
call()和apply()方法的参数都分为两个部分,第一个参数是要作为this的对象,其他参数是要借用的函数的参数。
如果第一个参数为null或缺省,就会把this指向全局对象(window)。
如下代码:
var a={ name:"saber", say:function () { console.log(this.name); } }, b={ name:"我是2b" }; a.say.call(b);
a有个say()方法,可以说出自己的名字,但b没有这个方法。我们用a的say方法来call(呼叫)b,说我也不是谦虚,还是你来吧。这样a的this就变成了b,this.name也就是b的name了。
操作NodeList时常常借助数组的方法,代码如下:
var img=document.querySelectorAll("img"); [].slice.call(img,0,5); [].forEach.call(img,function (no) { console.log(no.src); }); //[]相当于Array.prototype的简写
JavaScript中的call()和apply()
闭包是指有权访问另一个函数作用域中的变量的函数。
不用闭包的话,在函数外操作函数内的局部变量是不行的,因为局部变量的作用域只在函数内。我们可以通过闭包解决这个问题。
创建闭包的常见方式,就是在一个函数内部创建另一个函数,这样,被创建的函数就可以访问这部分作用域。
从形式上来说,给外部变量返回一个function,就形成了一个闭包。
function b() { var a=1; return function () { console.log(a); }; } var c=b(); c(); // 1
上面代码是给外部变量c赋值了一个函数,可以输出函数b里面的变量a。
除了用return创建函数,我们也可以直接赋值。
如下代码,函数内有一个局部变量a,我们通过闭包,可以在函数外设置和读取a的值。
var set,get; (function () { var a=0; set=function (s) { a=s; console.log(a); }; get=function () { console.log(a); }; })(); set(2); get();
使用闭包需要注意的问题有:
内存占用增加
this的指向。
JavaScript的闭包
财经网新闻:【中国电信原董事长常小兵受贿案开庭:16年间共收受376万】
清官(doge),估计是被整了。
现在多少村长,都比他贪的多的多。
有网友评论说:受贿300多万我居然觉得少,这一定不是我的错。
错的不是你,是社会(doge)
常小兵受贿案:16年间共收受376万
如果想要防止自己的网页被别人用iframe给引用过去,可以在Header里设定X-Frame-Options。
示例:
X-Frame-Options有3个值:
DENY
浏览器拒绝当前页面加载任何Frame页面
SAMEORIGIN
frame页面的地址只能为同源域名下的页面
ALLOW-FROM http://em.com/
这个网页只能放在http://em.com//网页架设的iFrame内
除了由服务器设置,网页也可以通过meta信息来设置,如:
<meta http-equiv="X-Frame-Options" content="deny">
pixiv的网页对于iframe就做了同源设置,如果在其他网站里试图将iframe的src设定为p站的url,是无效的。控制台报错信息如下:
使用X-Frame-Options防止网页被Frame
sublimerge是一款用于sublime text 2/3 中做 文件比较/文本对比 功能的插件。它支持读取剪贴板里的文本、可以双排、三排对比,可以同步滚动等。
如果要比较两个文件或文本,可以先打开其中一个文档,按下快捷键ctrl+alt+d,之后按照提示打开下一个文件/文本:
对比界面:
在对比窗口里右键,有一些扩展功能,比如把不同的文字或这一行文字复制到另一边等。此外sublimerge还有很多快捷键,在安装完插件后的readme文件里可以看到。
sublimerge可以免费使用全部功能,只不过每使用几次,会提醒你一次是否要购买许可。
sublime text 3 文件比较插件——sublimerge
fate里,四大文明古国的王者之前出了3个,设定都很吊,也没多少黑点,符合英雄式的人物形象。
埃及——拉二
两河流域——金闪闪
印度——迦尔纳
中国的帝王还没出过,而秦始皇在中国粉丝里YY的是期望最高的。今年东出写了一本荆轲外传性质的小说,讲的是荆轲刺秦。中国粉丝一看挺高兴,嗨呀我们秦始皇的卫星要落地了!结果东出笔下的秦始皇是这种样貌:
秦始皇眼睛没有高光,有着非人的牙齿,背后有巨大的肉瘤(用来给他提供营养和不老不死的能力,不过最后肉瘤被破了)。带有血腥的气息,行为也很残暴,抓起侍女去砸荆轲,把荆轲抓起来拍到柱子。
不仅暴虐,简直怪物,这是克苏鲁还是生化兵?反派boss的形象,反派boss的话语,没有体现出帝王的格局,臣下全是小人。
秦始皇千古一帝,然而东出笔下被描述成成这样,我只能让东出先飞个妈了。
也有人说这是东出为了衬托荆轲,所以将秦始皇丑化了。确实可能是把秦始皇作为boss来“强化”了。另外荆轲去刺杀秦始皇的原因竟然是为了愉悦(偷税)。不管怎样,这锅东出是背定了。
最近有很多网友在推特上与东出讨论(以及问候),现在东出在推特上又解释说,这只是秦始皇作为“敌人意义”的形象,如果作为英灵的秦始皇的话,不会是这样的。他在创作过程中还参考了张艺谋的电影《英雄》(这是怎么联系上的)。还有其他balabala的解释。
但是东出还是飞个妈吧,总之东出飞妈是没错的。
ps:还有很久以前导致贞德风评被害的孕圣女贞德,总之飞妈吧。
贴吧里的翻译已经出来了:
荆轲短篇、《刺客传 十步一杀》全文渣翻
东出飞妈
本文略微记录一下开发chrome扩展的经验,免得以后用到了还要再去查一遍文档。注意这不是教程,只是一点人生的经验……教程可以参考这里。
1.文件结构:
在扩展的根目录必须有个manifest.json文件,这个文件很重要,参数可以去文档里看。
其他的所有文件可以放在根目录,也可以建立文件夹存放。
扩展的图标可以用jpg或者png格式;官方建议是不要把图标占满画布,而是在四周留下一点空白。
一般我们需要一个在后台默默运行的js,通常叫做background.js,它能使用所有chrome扩展的API。
通常我们也需要有一个在前台运行的js,可以叫做content.js。这个js会被加载进前台页面执行,它只能使用很少的chrome扩展的API。而且它通常只能访问dom结构,不能直接使用页面上定义的函数。
如果需要也可以建立一个活动页面,一般叫做popup.html。
如果需要也可以建立一个选项页面,一般叫做options.html。
以上这些都需要在manifest.json里定义。
其他的文件可以自行发挥,比如html文件、css文件、图片等,有需要就可以建立,然后自行调用即可。
在background的参数里设置"persistent": false可将扩展作为event page,可以减少一些内存占用。
Read More →
制作chrome扩展的一些经验
p站上关于贞德的tag比较杂乱,本文搜的tag是ジャンヌ Fate/GrandOrder r-18,筛选出了收藏数1000以上的作品。虽然“ジャンヌ”并不是fgo的贞德的专有名词(ジャンヌ・ダルク才是),不过ジャンヌ里贞德的作品数量比ジャンヌ・ダルク多一些,所以我就按这个搜了。
压缩包里留下的图片是我筛选过的。
度盘下载 提取码:dsb9 解压密码:saber
Read More →
pixiv上的贞德(Fate/GrandOrder) r-18福利图片
如果我们要删除一个DOM节点,可能大家都会想到remove方法。如下:
var a=document.createElement("a"); // 设置内容等代码 ... a.parentNode.removeChild(a);
Node.removeChild() 方法从DOM中删除一个子节点。返回删除的节点。
从返回值是个节点我们可以知道,removeChild之后,这个节点虽然在DOM里去掉了,但是它仍然存在在内存里。
虽说过一段时间不用,它就会被浏览器回收掉,但如果要重复的创建这个节点的话,那么每次removeChild时使用delete操作符,可以略微优化内存占用(大概……)。
如下:
var a=document.createElement("a"); // 设置内容等代码 ... delete a.parentNode.removeChild(a);
今天我在chrome上做了多次实验,有一些发现:
1.使用delete之后,chrome浏览器并不会立即回收这部分内存,而是等差不多二十秒之后才回收。
2.使用delete之后,内存回收的比只remove要多一些。
3.即使使用delete,内存也不能完全回收,内存占用还是会一直增加。只是情况略有缓解。
4.有人说delete回收内存只能回收由JavaScript创建的节点,如果是原本html文档里的节点,delete是回收不了的。我试了试,对于原本html文档里的节点,用delete和只用remove没看出明显区别,大概这个说法是对的。