html-js 笔记
- Chrome 警告: Page layout may be unexpected due to Quirks Mode
文档加上
<!DOCTYPE html>
- 修改后一个悬浮的Div 位置错误
TipDiv.style.left = event.clientX;
...
修改后为
TipDiv.style.left = '' + event.clientX + 'px';
TipDiv.style.top = '' + y + 'px';
TipDiv.style.display = 'block';
TipDiv.innerHTML = "<span style='color:white;'>" + texts + "</span>";
- 对象遍历搜索,包含子节点
点击查看代码
function objlogdeep(name, obj, deepmax, keymax)
{
var lenp, str;
lenp = 16;
if(!deepmax)
deepmax=1;
if(!keymax)
keymax=4096;
function funinfo(ftext, nmax)
{
var len;
nmax || (nmax=96);
info = ""+ftext;
info = info.substring(0,nmax*4);
info = info.replace(/\r\n/g," ");
info = info.replace(/\n/g," ");
info = info.replace(/\t/g," ");
do{
len=info.length;
info = info.replace(/\s\s/g," ");
}while(len!=info.length);
info = info.substring(0,nmax);
return info;
}
function loopdeep(path, obj, deep)
{
var head, hlen, spath, keylist, str, i;
if(deep >= deepmax)
return "";
if(obj == null)
return "";
if(typeof(obj)=='string' || typeof(obj)=='number' || typeof(obj)=='undefined')
return "";
hlen = lenp*(deepmax+1);
keylist =Object.keys(obj);
if(keylist.length > keymax)
{
head = path;
for(i=head.length;i<hlen;i++)
head+=" ";
str = head + "Property skip: > 4096\r\n";
return str;
}
str = "";
for(var key in obj)
{
var val, info;
try {val=obj[key]; }
catch(err){ val="error..."; }
spath = path;
spath += "." + key;
head = spath;
for(i=spath.length;i<hlen;i++)
head+=" ";
head+=" ";
if(typeof(val)=='function')
{
info = funinfo(val);
str += head + key + " -> " + info + "\r\n";
str += loopdeep(spath, val, deep+1);
continue;
}
if(typeof(val)=='object')
{
info = funinfo(val);
str += head + key + "=" + info + "\r\n";
if(key=='caller')
continue;
str += loopdeep(spath, val, deep+1);
continue;
}
info = "" + val;
if(info.length >= 96)
info = info.substring(0, 96);
str += head + key + "=" + info + " (type: " + typeof(val)+ ")" + "\r\n";
str += loopdeep(spath, val, deep+1);
}
if(typeof(obj)=='function' && obj.prototype)
{
spath = path;
spath += "." + "prototype";
str += loopdeep(spath, obj.prototype, deep);
}
return str;
}
str = loopdeep(name, obj, 0);
return str;
}
- 保存文件
var Element_local_FileSave;
function FileSave(filename, str)
{
function base64(s)
{
return window.btoa(unescape(encodeURIComponent(s)));
}
const uri = 'data:text/plain;charset=UTF-8;base64,';
url = uri + base64(str);
var down = document.getElementById("local_FileSave");
if(!down)
down = Element_local_FileSave;
if(!down)
{
down = document.createElement('a');
Element_local_FileSave = down;
}
down.href = url;
down.download = filename;
down.id = "local_FileSave";
ret = down.click();
return str.length;
}
SubtleCrypto 使用AES 测试
async function Aes128Test(){
var decoder = new TextDecoder();
var encoder = new TextEncoder();
var key1 = await window.crypto.subtle.importKey(
"raw",
encoder.encode("aes_128_password"),
"AES-CBC",
true,
["encrypt", "decrypt"]
);
var dat_enc = await window.crypto.subtle.encrypt(
{ name: "AES-CBC", iv: encoder.encode("aes_128_iv_datax") },
key1,
encoder.encode("TestAesText"),
);
var dat_dec = await window.crypto.subtle.decrypt(
{ name: "AES-CBC", iv: encoder.encode("aes_128_iv_datax") },
key1,
dat_enc
);
var dat_text = decoder.decode(dat_dec);
// console.log(dat_text);
}