分类目录归档:html学习笔记

从根本解决 chrome 浏览器在 打开新标签页 的时候弹出 2345 主页

最近快要过年了,过年嘛,事情比较多,所以好长时间没有更新,主要也是没什么材料更新。(瞎说什么大实话)不过无论如何,得先祝大家新年快乐才是。

问题是这样的,就是在用chrome浏览器的时候点那个新建标签页按钮,就会跳出来2345的主页,但是也不是一定的,就是说总是会在我猝不及防的时候蹦出来,再次点的话就又出不来了。这确实很让人头疼,总觉得有刁民要陷害朕的感觉。然而觉得问题不是很严重,也就很久没理,直到今天我实在是受不了了,因为我的每个装有chrome的电脑都出现了类似的问题。

去网上转悠了一圈,发现很多人都说是扩展应用所致,但是都说不准是哪个扩展,大多说把新的扩展停用就好,但是呢,我已经很久很久没有去逛应用超市了,而且我的几十个扩展假如挨个试的话实在是好累,而且那个主页跳出来的情况也很随机,初步怀疑还加了随机的代码。

无奈之时,突然心生一计(额。。。),为什么我不去问问扩(mo)展(fa)代(hai)码(luo)呢?

于是我打开chrome的扩展程序目录,点击搜索去搜2345的链接:chromeext2345-1

哦呦?这就束手就擒了?因缺思婷!

为什么我们不打开看看呢?chromeext2345-2

看到这里我陷入了深深的沉思!!!!!!这。。。。

不得不说这段代码真的是心机满满啊!当他检测到chrome://newtab/的时候,他就抓一下时间,然后和cookies里边的时间比一下,如果超过21600000毫秒的话,就重定向页面到2345。。。。而21600000毫秒如果我没有算错的话。。。是6小时!

哎,不知道这是费了多少心机想到这么一个主意,不过说实话,从一个角度说,这确实是有想法。。。毕竟我都有这么长时间没有起除掉它的念头。

但是呢,广告嘛,不能这么做,让人很不舒服,我觉得广告应该这么做:如果你觉得我这篇文章写得好或者解决了你的问题的话请点击这里浏览广告支持我吧~

(其实并没有什么广告,只是我主页的链接而已,别想多。。。我这点可怜的浏览量并不值几分钱。。。所以不想费心打理广告,反正目前还能掏得起服务器钱。。。。)

那么下面简单说说怎么解决吧。。。最简单粗暴的方法就是看准它的ID,然后找到扩展选项那里,把它停用就好。但是假如你又想用那个扩展的话就可以这样:

首先打开它,删掉那些代码然后把它文件夹下的_metadata文件删掉,打开chrome浏览器,选中开发者模式,打包,选那个路径,把打包好的应用重新安装一下就好了。

好好享受chrome吧~~~不过说到广告,为了回报ABP给我这么长时间清爽上网的体验的贡献,在这里强行安利一发Adblock Plus,简直良心到不要不要的过滤器啊!!!当做是我对它微不足道的捐赠吧~

html前台使用js生成文件哈希(hash)

这次要认认真真的写一篇文章了,咳咳。 关于如何前台生成文件hash的文章。

之前在网上找了很多文章都没有特别详细的内容,最后根据一些信息还有自己的摸索,做了出来,所以借以分享给大家。

首先我先来简单说说hash,它的意思是通过一个算法,将一串数据通过运算变换成一个固定长度的摘要(或者说指纹),然后我们可以在数据交换的时候用它来对数据的内容进行校验等等。

举个栗子:最近我就这么用了用它,当客户端向服务器传输数据的时候,需要先向服务器提供文件的hash,然后如果服务器包含了同样hash的文件,那么返回信息不需要客户端上传,只用给用户建立一个链接就好,如果没有,那么就要求客户端上传文件。

于是就牵扯到了这个问题,就是在html前台生成文件的hash,然后发给服务器,等待服务器回复。

研究了很久终于实现了。是借用了一个名叫crypto-js的加密库实现的。这是它在googlecode上的项目地址:https://code.google.com/p/crypto-js/

闲话少说,具体实现是这么做的:

首先要先在网页上有一个文件选取的框:

<input type=”file” />

它的效果是这样的:

当然它具体长什么样要看用户使用的浏览器了。不过没关系后边我就要说怎么样美化这个框框。

可以看到已经可以通过这个框框来选取文件了。然后我们就要在js上边下功夫了。

首先我们给这个输入的框一个可以被js调用的id。

<input id=”UploadFile” type=”file” />

然后我们开始写js:

function FileHashCreat(){
var fileReader = new FileReader(); //建立一个FileReader对象
var BlobSlice = File.prototype.mozSlice || File.prototype.webkitSlice || File.prototype.slice; //用于支持多种浏览器的文件读取
file = document.getElementById(“UploadFile”).files[0]; //通过id获取html中input标签的文件
var BlockSize = 10485760; //要把文件分成一块一块的,这样可以应对巨大的文件而不至于出错,这里将文件以10M为单位进行分割。
var Blocks = Math.ceil(file.size / BlockSize); //首先计算需要分割的块数
var CurrentBlock = 0; //记录当前已经运行的块数
var FileSHA256 = CryptoJS.algo.SHA256.create(); //新建一个对象
var start = 0;
var end = start + BlockSize >= file.size ? file.size : start + BlockSize;
//这一句可以等价为:
/****************
var end = 0;
if (start + BlockSize >= file.size){
end = file.size;
}else{
end = start + BlockSize;
}
****************/
//防止读取文件的长度发生错误
fileReader.readAsArrayBuffer(BlobSlice.call(file, start, end));
fileReader.onload = function(filestring) { //文件读取过程
FileSHA256.update(arrayBufferToWordArray(filestring.target.result)); //根据其项目中的描述,可以通过这种方法将数据分段后加载,但是因为crypto-js这个库不能直接接受arraybuffer,所以要进行转换。
CurrentBlock++; //文件区块后移
if (CurrentBlock < Blocks) { //判断是否到达文件末尾
start = CurrentBlock * Blocksize; //更新文件区块开始结束的位置
end = start + BlockSize >= file.size ? file.size : start + BlockSize;
fileReader.readAsArrayBuffer(BlobSlice.call(file, start, end)); //加载下一个区段
} else {
var FileHash = FileSHA256.finalize(); //获取最终的文件hash,注意这个finalize只能调用一次,多次调用会出错。

}
}
}
//arraybuffer to wordarray 的转换函数
function swapendian32(val) {
return (((val & 0xFF) << 24)
| ((val & 0xFF00) << 8)
| ((val >> 8) & 0xFF00)
| ((val >> 24) & 0xFF)) >>> 0;

}
function arrayBufferToWordArray(arrayBuffer) {
var fullWords = Math.floor(arrayBuffer.byteLength / 4);
var bytesLeft = arrayBuffer.byteLength % 4;

var u32 = new Uint32Array(arrayBuffer, 0, fullWords);
var u8 = new Uint8Array(arrayBuffer);

var cp = [];
for (var i = 0; i < fullWords; ++i) {
cp.push(swapendian32(u32[i]));
}

if (bytesLeft) {
var pad = 0;
for (var i = bytesLeft; i > 0; –i) {
pad = pad << 8;
pad += u8[u8.byteLength – i];
}

for (var i = 0; i < 4 – bytesLeft; ++i) {
pad = pad << 8;
}

cp.push(pad);
}

return CryptoJS.lib.WordArray.create(cp, arrayBuffer.byteLength);
};

 至此就实现了所述功能。

这是一个demo,可以试试:

前台生成文件hash
===============我是分界线=================

如果想要美化那个丑丑的文件选择框的话,可以直接给他加个style=”display:none;”,然后再在自己画的按键或者标签的那里加上:

document.getElementById(“UploadFile”).click();

就可以了!