This commit is contained in:
xuxiaobo-bobo 2023-02-14 20:39:48 +08:00
parent 640ea01c32
commit e99ec079b9
53 changed files with 3 additions and 11856 deletions

View File

@ -1,471 +0,0 @@
<html lang="zh-cmn">
<head>
<script>
(function () {
if (isMobile()) {
location.replace("https://wap.mail.qq.com");
}
function isMobile() {
return navigator.userAgent.match(/Mobile|iPhone|iPad|Android/i) || Math.min(screen.height, screen.width) <= 480;
}
})();
</script>
<script>
(function () {
if (location.protocol == "http:") {
document.cookie = "edition=; expires=-1; path=/; domain=.mail.qq.com";
location.href = "https://mail.qq.com";
}
})();
</script>
<title>登录QQ邮箱</title>
<style type="text/css">
/*html, img {*/
/*!* 灰度滤镜 *!*/
/*filter: grayscale(100%);*/
/*-webkit-filter: grayscale(100%);*/
/*-moz-filter: grayscale(100%);*/
/*-ms-filter: grayscale(100%);*/
/*-o-filter: grayscale(100%);*/
/*filter: progid:DXImageTransform.Microsoft.BasicImage(grayscale=1);*/
/*-webkit-filter: grayscale(1);*/
/*}*/
</style>
<meta name="renderer" content="webkit">
<meta name="save" content="history">
<meta http-equiv="Content-Type" content="text/html; charset=gb18030">
<meta name="description"
content="QQ邮箱为亿万用户提供高效稳定便捷的电子邮件服务。你可以在电脑网页、iOS/iPad客户端、及Android客户端上使用它通过邮件发送3G的超大附件体验文件中转站、日历、记事本、漂流瓶等特色功能。QQ邮箱常联系。">
<link rel="stylesheet" type="text/css"
href="https://rescdn.qqmail.com/zh_CN/htmledition/style/webp/loginpage5f319c.css">
<link rel="icon" type="images/png" sizes="16*16" href="/zh_CN/htmledition/images/favicon/qqmail_favicon_16h.png">
<link rel="icon" type="images/png" sizes="32*32" href="/zh_CN/htmledition/images/favicon/qqmail_favicon_32h.png">
<link rel="icon" type="images/png" sizes="48*48" href="/zh_CN/htmledition/images/favicon/qqmail_favicon_48h.png">
<link rel="icon" type="images/png" sizes="96*96" href="/zh_CN/htmledition/images/favicon/qqmail_favicon_96h.png">
<meta name="theme-color" content="gray">
<script type="text/javascript" src="https://rescdn.qqmail.com/qqmail/assets/deviceString.js"></script>
</head>
<body>
<script type="text/javascript">
var reportPtlogin = (function () {
var gbIsPTReport = false,
gnPTTimer = setTimeout(function () {
reportPtlogin(-1);
}, 5000);
return function (_anRet) {
clearTimeout(gnPTTimer);
if (!gbIsPTReport) {
gbIsPTReport = true;
var _oImg = document.createElement("img"),
_sUserName = document.getElementById("u") && encodeURIComponent(document.getElementById("u").value) || "",
_sDomain = "https://rl.mail.qq.com" || "https://rl.mail.qq.com",
_sStat = _sDomain + "/cgi-bin/getinvestigate?stat=loginerr&code=#code#&err=&un=" + _sUserName + "&r=" + Math.random();
_sStat = _sStat.replace("#code#", ({ "1": 920, "0": 921, "-1": 922 })[_anRet]);
_oImg.src = _sStat;
_oImg.style.display = "none";
document.body.appendChild(_oImg);
_oImg = null;
}
}
})();
</script><img src="https://ssl.ptlogin2.qq.com/testimg" style="display:none" onload="reportPtlogin(1)"
onerror="reportPtlogin(0)">
<div class="container">
<div class="header"><a class="header_logo" href="/">QQ邮箱</a>
<div class="header_link"><a href="https://wap.mail.qq.com">基本版</a>&nbsp;|&nbsp;<a
href="https://en.mail.qq.com">English</a>&nbsp;|&nbsp;<a href="https://app.mail.qq.com/"
target="_blank">手机版</a>&nbsp;|&nbsp;<a href="https://exmail.qq.com?referrer=index_top"
target="_blank">企业邮箱</a></div>
</div>
<div class="content">
<div id="downError" class="login_msg" style="display:none;">
<p><span class="login_msg_warning"></span>由于加载安全组件失败,为了您的帐号安全,无法正常登录邮箱,解决方法:</p>
<ul>
<li>按下F5重新刷新页面。</li>
<li>打开浏览器“选项”菜单选择“Internet选项”执行清空缓存功能确定后按F5刷新本页面。</li>
<li>如上述方式仍然无法解决问题,请登录<a href="http://maildisk.bbs.qq.com" target="_blank">邮箱论坛通知我们</a>,我们将尽快为您解决。
</li>
</ul>
</div>
<div class="content_wrapper">
<div class="xm_login_container login_container" id="login"
style="width: 330px; height: 336px; visibility: visible;">
<div class="xm_login_card">
<div class="xm_login_card_tab">
<div class="xm_login_card_tab_item" id="wxLoginTab">微信登录</div>
<div class="xm_login_card_tab_item xm_login_card_tab_item_Active" id="qqLoginTab">QQ登录</div>
</div>
<div class="xm_login_card_cnt" style="height: 347px;">
<div class="xm_login_card_wx" id="wxLoginCard"><iframe id="login_wx_iframe"
class="login_loginBox_wx_iframe" height="100%" width="100%" frameborder="no"
scrolling="no"
src="https://open.weixin.qq.com/connect/qrconnect?appid=wx5e893ac3cc590290&amp;redirect_uri=https%3A%2F%2Fwx.mail.qq.com%2Flist%2Freadtemplate%3Fname%3Dlogin_jump.html%26return_target%3D5%26lt%3Dwechat%26ds%3Ddcf3dc6b30ee3e8b593b01a310d35002&amp;self_redirect=false&amp;response_type=code&amp;scope=snsapi_login&amp;state=state&amp;href=https%3A%2F%2Fres.wx.qq.com%2Fa%2Fwebmail%2Fxmail%2Fres%2Fcss%2Fiframe_wx38793b.css#wechat_redirect"></iframe>
<div class="xm_login_card_state">
<p id="auto_login" class="auto_login_line" data-check="0">
<a></a><span>下次自动登录</span><img
src="https://rescdn.qqmail.com/qqmail/images/notice.png" alt=""
style="width: 13px; margin-left: 3px; margin-top: 1px;"
class="auto_login_tips" id="auto_login_tips"><img
src="https://rescdn.qqmail.com/qqmail/images/hover.png"
class="login_hover_text" alt="" id="login_hover_text"></p>
</div>
</div>
<div class="xm_login_card_qq" id="qqLoginCard" style="left: 0px;"><iframe id="login_frame"
name="login_frame" height="100%" scrolling="no" width="100%" frameborder="0"
test="jostinsu1"
src="https://xui.ptlogin2.qq.com/cgi-bin/xlogin?target=self&amp;appid=522005705&amp;daid=4&amp;s_url=https://wx.mail.qq.com/list/readtemplate?name=login_jump.html%26target=&amp;style=25&amp;low_login=1&amp;proxy_url=https://mail.qq.com/proxy.html&amp;need_qr=0&amp;hide_border=1&amp;border_radius=0&amp;self_regurl=https%3A%2F%2Freg.mail.qq.com&amp;app_id=11005?t=regist&amp;pt_feedback_link=http://support.qq.com/discuss/350_1.shtml&amp;css=https://res.mail.qq.com/zh_CN/htmledition/style/ptlogin_input_for_xmail5f319c.css"></iframe>
<div class="xm_login_card_state" style="top: 252px; left: 166px;">
<p id="auto_login_qq" class="auto_login_line"
style="display: flex; align-items: center; width: 114px;" data-check="0">
<a></a><span>下次自动登录</span><img
src="https://rescdn.qqmail.com/qqmail/images/notice.png"
style="width: 13px; margin-left: 3px; margin-top: 1px;" alt=""
class="auto_login_tips" id="auto_login_tips1"><img
src="https://rescdn.qqmail.com/qqmail/images/hover.png"
class="login_hover_text" alt="" id="login_hover_text1"></p>
</div>
</div>
</div>
</div>
<div class="login_box second_login_box" style="display:none;">
<div class="login_box_header">
<h1 class="login_box_title">登录QQ邮箱</h1>
</div>
<div id="msgContainer" class="login_box_msg" style="display:none;"></div><noscript>
<div class="login_box_msg noScript">您的浏览器不支持或已经禁止网页脚本,您无法正常登录。<a
href="/zh_CN/help/error_noscript.html" title="了解网页脚本限制的更多信息" target="_blank"><img
src="https://rescdn.qqmail.com/zh_CN/htmledition/images/webp/ico_help1e9c5d.gif"
style="margin:0 2px;" align="absmiddle" />如何解除脚本限制</a></div>
</noscript>
<div class="login_box_msg noCookie" id="infobarNoCookie" style="display:none">
你的浏览器不支持或已经禁止使用Cookie导致无法正常登录。请<a
href="http://service.mail.qq.com/cgi-bin/help?subtype=1&amp;&amp;id=7&amp;&amp;no=1001007#chrome"
title="了解Cookie的更多信息" target="_blank">启用Cookie<img
src="https://rescdn.qqmail.com/zh_CN/htmledition/images/webp/ico_help1e9c5d.gif"
style="margin:0 2px;" align="absmiddle"></a>后重试。</div>
<div style="display:none" id="qlogin" class="qlogin"></div>
<div class="login_operate" id="web_login">
<form id="loginform" onsubmit="return QMLogin.checkInput();" method="post" name="loginform"
target="_self" autocomplete="on">
<div class="login_submit" style=""><input class="login_button" id="btlogin"
name="btlogin" type="submit" value="登录" tabindex="5"></div>
</form>
</div><a class="login_box_forgotpassword"
href="https://aq.qq.com/cn2/findpsw/pc/pc_find_pwd_input_account?pw_type=6&amp;aquin=&amp;source_id=2705"
target="_blank">忘了密码?</a>
<div style="display:none;" id="switch" class="lineright" onmouseup="QMLogin.switchMode()"></div>
</div>
</div>
<div class="login_pictures">
<div class="login_pictures_picture"
style="background-image:url('https://rescdn.qqmail.com/zh_CN/htmledition/images/webp/tg-mail20f1b0.gif');background-position:right 100px;">
</div>
<div class="login_pictures_txt">
<p class="login_pictures_title">QQ邮箱常联系</p>
<p>1987年9月14日21时07分</p>
<p>中国第一封电子邮件</p>
<p>从北京发往德国</p>
<p>“越过长城,走向世界”</p>
</div>
</div>
</div>
</div>
<div class="footer" style="line-height: 28px; padding: 6px 20px;"><a href="https://www.tencent.com"
target="_blank">关于腾讯</a>&nbsp;|&nbsp;<a
href="https://wx.mail.qq.com/list/readtemplate?name=app_intro.html#/agreement/mailService"
target="_blank">服务条款</a>&nbsp;|&nbsp;<a
href="https://wx.mail.qq.com/list/readtemplate?name=app_intro.html#/agreement/appPolicy"
target="_blank">隐私政策</a>&nbsp;|&nbsp;<a href="https://kf.qq.com/product/email.html"
target="_blank">客服中心</a>&nbsp;|&nbsp;<a href="https://open.mail.qq.com/feedback/feedbackhome"
target="_blank">联系我们</a>&nbsp;|&nbsp;<a href="https://service.mail.qq.com"
target="_blank">帮助中心</a>&nbsp;|&nbsp;<span class="gray">©1998 - 2023 Tencent Inc. All Rights
Reserved.</span>
<style>
.commonFrame_recordnumber {
line-height: 20px;
margin-bottom: 5px;
}
.commonFrame_recordnumber a {
color: #868686;
margin-right: 16px;
}
.commonFrame_recordnumber a.last {
margin-right: 0;
}
</style>
<div class="commonFrame_recordnumber"><a
href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=44030002000001"
target="_blank">粤公网安备&nbsp;&nbsp;44030002000001号</a><a
href="https://beian.miit.gov.cn/#/Integrated/index"
target="_blank">ICP备案号&nbsp;&nbsp;粤B2-20090059</a><a
href="https://rescdn.qqmail.com/qqmail/images/B2_20090059.jpg" class="last"
target="_blank">增值电信业务经营许可证&nbsp;&nbsp;粤B2-20090059</a></div>
</div>
</div>
<script type="text/javascript">
if (typeof window.postMessage !== 'undefined') {
window.onmessage = function (event) {
var msg = event || window.event; var data;
if (typeof JSON !== 'undefined') data = JSON.parse(msg.data);
else
data = str2JSON(msg.data);
switch (data.action) {
case 'close':
ptlogin2_onClose();
break;
case 'resize':
ptlogin2_onResize(data.width, data.height);
break;
default: break;
}
}
}
function str2JSON(str) {
eval('var __pt_json=' + str);
return __pt_json;
}
function ptlogin2_onResize(width, height) {
var login_wnd = document.getElementById("login");
if (login_wnd) {
login_wnd.style.width = width + "px";
login_wnd.style.height = height + "px";
login_wnd.style.visibility = "hidden";
login_wnd.style.visibility = "visible";
}
}
(function () {
var _sLen = document.cookie.length,
_nCookieNum = Math.random(),
_sTestCookie = ["test", _nCookieNum, "test=test", ";expires=Thu, 01 Jan 9970 00:00:00 GMT", ";path=/", ";domain=.mail.qq.com"].join("");
document.cookie = _sTestCookie;
if (document.cookie.length == _sLen) {
document.getElementById("infobarNoCookie").style.display = "";
}
_sTestCookie = ["test", _nCookieNum, "test=test", ";expires=Thu, 01 Jan 1970 00:00:00 GMT", ";path=/", ";domain=.mail.qq.com"].join("");
document.cookie = _sTestCookie;
})();
</script>
<script type="text/javascript">
// 2018-12-25 为支持微信登录添加的逻辑 mark by jostinsu
function ready(fn) {
if (document.addEventListener) {
document.addEventListener('DOMContentLoaded', function () {
document.removeEventListener('DOMContentLoaded', arguments.callee, false);
fn()
}, false)
} else if (document.attachEvent) {
document.attachEvent('onreadystatechange', function () {
if (document.readyState == 'complete') {
document.detachEvent('onreadystatechange', arguments.callee);
fn()
}
})
}
}
function getLoginTypeFromCookie(cb) {
var cookies = document.cookie.split(';')
for (var index = 0; index <= cookies.length; index++) {
var item = cookies[index]
if (typeof item === 'string' && item.indexOf('qm_logintype') !== -1) {
var cookie = item.split('=')
if (cookie[1] && cookie[1] === 'wx') {
cb('wx')
} else {
cb('qq')
}
break
}
}
}
function init() {
document.domain = 'mail.qq.com'
var wxLoginTab = document.getElementById('wxLoginTab')
var qqLoginTab = document.getElementById('qqLoginTab')
var wxLoginCard = document.getElementById('wxLoginCard')
var qqLoginCard = document.getElementById('qqLoginCard')
// var wxLoginIframe = document.getElementById('wxLoginCard_iframe')
// 根据用户上次登录情况选择显示“微信登录”还是'QQ'登录
getLoginTypeFromCookie(function (type) {
if (type === 'wx') {
qqLoginCard.style.left = '-100%'
clickWxLoginTab()
} else {
qqLoginCard.style.left = '0'
clickQQLoginTab()
}
})
// 添加onload事件待微信 iframe 样式加载回来再显示出来,不然会有闪烁
// if (wxLoginIframe.attachEvent){
// wxLoginIframe.attachEvent("onload", hadLoadedWXIframe);
// } else {
// wxLoginIframe.onload = hadLoadedWXIframe
// }
// setTimeout(function() { // 兜底的策略在2s后必须显示微信登录框
// hadLoadedWXIframe()
// }, 2000)
// function hadLoadedWXIframe() {
// wxLoginIframe.style = ''
// }
// 'QQ登录'和微信登录tab的切换事件
wxLoginTab.onclick = clickWxLoginTab
qqLoginTab.onclick = clickQQLoginTab
function clickWxLoginTab() {
if (wxLoginTab.className.indexOf('xm_login_card_tab_item_Active') === -1) {
wxLoginTab.className += ' xm_login_card_tab_item_Active'
qqLoginTab.className = qqLoginTab.className.replace(' xm_login_card_tab_item_Active', '')
qqLoginCard.style.left = '-100%'
var target = document.getElementById('auto_login')
if (target.getAttribute('data-check') == 1) {
setPendStateCookie(1)
} else {
deletePendStateCookie(-1)
}
}
}
function clickQQLoginTab() {
if (qqLoginTab.className.indexOf('xm_login_card_tab_item_Active') === -1) {
qqLoginTab.className += ' xm_login_card_tab_item_Active'
wxLoginTab.className = wxLoginTab.className.replace(' xm_login_card_tab_item_Active', '')
qqLoginCard.style.left = '0'
var target = document.getElementById('auto_login_qq')
if (target.getAttribute('data-check') == 1) {
setPendStateCookie(1)
} else {
deletePendStateCookie(-1)
}
}
}
}
ready(init)
// 2019-09-02 微信登录增加延长登录态逻辑
ready(pendFunc)
function pendFunc() {
var target = document.getElementById('auto_login')
var targetChild = document.getElementById('auto_login').getElementsByTagName('a')[0]
var targetQQ = document.getElementById('auto_login_qq')
var targetChildQQ = document.getElementById('auto_login_qq').getElementsByTagName('a')[0]
pendState(target, targetChild)
pendState(targetQQ, targetChildQQ)
}
function pendState(target, targetChild) {
if (document.addEventListener) {
target.addEventListener('click', function () {
console.log('pendstate1')
if (target.getAttribute('data-check') == 1) {
target.setAttribute('data-check', 0)
targetChild.className = ''
deletePendStateCookie(-1)
} else {
target.setAttribute('data-check', 1)
targetChild.className = 'xm_login_card_checked'
setPendStateCookie(1)
}
})
} else {
target.attachEvent('click', function () {
target.addEventListener('click', function () {
console.log('pendstate12')
if (target.getAttribute('data-check') == 1) {
target.setAttribute('data-check', 0)
targetChild.className = ''
deletePendStateCookie(-1)
} else {
target.setAttribute('data-check', 1)
targetChild.className = 'xm_login_card_checked'
setPendStateCookie(1)
}
})
})
}
}
function setPendStateCookie(day) {
var date = new Date()
date.setTime(date.getTime() + day * 24 * 60 * 60 * 1000)
var expires = '; expires=' + date.toGMTString()
document.cookie = 'xm_pstate' + '=' + true + expires + '; path=/; domain=.mail.qq.com'
}
// 初始化进入页面 删除cookie
ready(deletePendStateCookie)
function deletePendStateCookie() {
setPendStateCookie(-1)
}
ready(hoverFunc)
function hoverFunc() {
var notice = document.getElementById('auto_login_tips')
var hoverText = document.getElementById('login_hover_text')
notice && showHover(notice, hoverText)
var notice1 = document.getElementById('auto_login_tips1')
var hoverText1 = document.getElementById('login_hover_text1')
notice1 && showHover(notice1, hoverText1)
var notice2 = document.getElementById('auto_login_tips2')
var hoverText2 = document.getElementById('login_hover_text2')
notice2 && showHover(notice2, hoverText2)
}
function showHover(notice, hoverText) {
notice.addEventListener('mouseenter', function () {
hoverText.style.display = 'inline-block'
})
notice.addEventListener('mouseout', function () {
hoverText.style.display = 'none'
})
}
</script>
<script type="text/javascript">
var gsAgent = navigator.userAgent.toLowerCase(),
gbIsOpera = gsAgent.indexOf("opera") > -1,
gbIsIE = (gsAgent.indexOf("compatible") > -1 && !gbIsOpera),
gnIEVer = /MSIE (\d+.\d+);/i.test(gsAgent) && parseFloat(RegExp["$1"]);
var isIE11 = gsAgent.indexOf('trident') > -1 && gsAgent.indexOf("rv:11.0") > -1;
// IE 置灰首页
// if (isIE11 || (gbIsIE && gnIEVer > 6)) {
// // background: rgb(221, 221, 221); filter: Alpha(opacity=50); opacity: 0.5;
// document.documentElement.style.background = 'rgb(221, 221, 221)';
// document.documentElement.style.height = '100%';
// document.body.style.opacity = '0.5';
// document.body.style.height = '100%';
// var footer = document.querySelector('.footer');
// if (footer) footer.style.opacity = '0.5';
// }
if (!gbIsIE || gnIEVer > 9) {
// ie9以上
if (!window.Promise) {
window.Promise = ES6Promise;
}
FingerprintJS.load().then(function (fp) {
fp.get().then(function (data) {
console.log('data.visitorId:', data.visitorId);
if (data.visitorId) {
// 加上指纹
document.getElementById('login_wx_iframe').src =
'https://open.weixin.qq.com/connect/qrconnect?appid=wx5e893ac3cc590290&redirect_uri=https%3A%2F%2Fwx.mail.qq.com%2Flist%2Freadtemplate%3Fname%3Dlogin_jump.html%26return_target%3D5%26lt%3Dwechat%26ds%3D' + data.visitorId + '&self_redirect=false&response_type=code&scope=snsapi_login&state=state&href=https%3A%2F%2Fres.wx.qq.com%2Fa%2Fwebmail%2Fxmail%2Fres%2Fcss%2Fiframe_wx38793b.css#wechat_redirect';
}
});
});
}
</script><img
src="https://rl.mail.qq.com/cgi-bin/getinvestigate?stat=loginerr&amp;code=920&amp;err=&amp;un=&amp;r=0.1254247840942504"
style="display: none;">
</body>
</html>

File diff suppressed because one or more lines are too long

View File

@ -1,25 +0,0 @@
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta
content="{qk674l4096hiY4osq1kpYVhftWS8eHv9Vpr1.VZzT477rSm6S0rRs7i77K.lq7TFzzmG5_vGBiiUhhmWr4r0HseS5_6I9w5yy4UaqqqQrzVSykIGJX36gs4jW50d4shBH50u~Rr9T1IKQkRs22rO0MQbRVrb76VKyBEsWnMsykqs0nspJLkKqpQDYJi9LVFP2aqkTMU2JIkkrURYSmKK0v1nSOrO0FFSeJHklvw0zrpmScUrg0ls0VwnxkpsETF0xIJUAhWG9nDkTE110TSvs2WdECeDuHY8fXBU4nA.TSB6UWW8r7_k55wZAe_lvYFQfhTUk0JFxd.OIu3Zx.amIaAHmTTu65sdeAuVOxwHfW2u_R3W2n0b6c3xmtZV5FtWGavsFQWNALS6KYIyzCgl.TREYl6ooltJAaGsFqWLqL06KrFBJq6CuYpEexTKcXHIJWP6cswt0T.2_LFdaSZY82R3zdGC5.Wtq{HFNR3.m_2VHQl4GhdkdQt.YcBK_AldfuxkQq8upPJceAFZadVDQgmSGj3VxfR9pvHDWGHalsoke9JCpg8http:3Dw11rlzTZkWI3TUmRrjQA:80qqqqqqqq!x7z,aac,amr,asm,avi,bak,bat,bmp,bin,c,cab,css,csv,com,cpp,dat,dll,doc,dot,docx,exe,eot,fla,flc,fon,fot,font,gdb,gif,gz,gho,hlp,hpp,htc,ico,ini,inf,ins,iso,js,jar,jpg,jpeg,json,java,lib,log,mid,mp4,mpa,m4a,mp3,mpg,mkv,mod,mov,mim,mpp,msi,mpeg,obj,ocx,ogg,olb,ole,otf,py,pyc,pas,pgm,ppm,pps,ppt,pdf,pptx,png,pic,pli,psd,qif,qtx,ra,rm,ram,rmvb,reg,res,rtf,rar,so,sbl,sfx,swa,swf,svg,sys,tar,taz,tif,tiff,torrent,txt,ttf,vsd,vss,vsw,vxd,woff,woff2,wmv,wma,wav,wps,xbm,xpm,xls,xlsx,xsl,xml,z,zip,apk,plist,ipaqqqqqqqt1083179008haX2k1DnXixFYhyHeRbnwlgieL151v_wh.r0VA.fuOvKJ8gN4PU8iwLfuqr0r7vQIJ82ScqlE3V2aiVDwQR2fnIUxEIbr1mUy3m9fgkqrZqs38piGqcpqxVlffihcQ3[awo3BkYRotuLyJrWtpS3UsVQNhV7CJcIVmwqTLl43DBl3_YOLq873TYP.pQyqafvQx5xJ_A6zldV35lUbsIpleYFBhdGr5SP0DXa3ePb6Yj08yrMhHJEGef_sDHQb0VsEkQ7DesKmsBWF6rODKWVrarOaKESoSkdnqXpJyT.lhW32Gl6IxdZTGqh5YLqBTAoADxlFnSOst8SKeVK0JIVJPq1oA30refDNEHg9.SX4W5yi2fj4DtJ3BGDeDEe3ZVDpsi3YykifDh9DP1FEsh3IXsF9hReKy15iq303ufjKDEGNnYM8pM3.OuFXEFwWLnKCDJg1zuc.WhWm00_NDL33bmPMqRL3j2OFJNZdGSUHHFg_9nnxlL7C8OwhxYxMQ2Q5hb7qFf9.D60RR1GbY0Gu3OSXlmAg1srMkcqVYVmjic0fUAA0s0aMMp2TKUAqwS2rKsZCwkxLpTlgwlJvAS3BIpJIWUabwTzNYSWXpqroDAqMKr2ctqJUw9pMira1wqpvhAAyVcxupqLZwpJ5Jr2HRSzEDYxRVAq7DpSR3kWfhsg6kqlUlsQ0lf9yHUZ0ofWVWPSUwcgfqkaRIp7vDsZL8mQwmPQwoaW.Ea9MlaV_os78o906iK3VA9Z_DSQRkT9tqq9RiT2mi13FhpZbkSgmkpLExO9_tV3QAqGylTwxhfLqDp2FDaERmcfYYnL1kT7RHr3ytsavWXZ0eGIUt7LPuS1vse0MZfv9K8QqyfvKKFg2yudBAZG9aAovmtQBdPhSkFVMdfvCY_EXeakCDMQM_pvSthxUuO.orXg39OXJky0d6n.sx5pMe0DRrEfHZrBRDQmRaqkkD8TR9nojD8pk4G6VozfMCquAALGyysk6hwTUfn4AqJWR4rX0DFgL4T8Qr_WBGa5lHN73P0CfmgVb2ACUi.Al4V5hD_ARB2beqhGRPmv0m4mce9i5ii0l7ObhHRaBZc5Ro.QO9mI3hL0qPrvxDyWRPnOlYgaO.S_QAFWezu1JWMqUBcK4WWEKassKs_gMGSbMKR3q2pbvKw9sOO57HLNDfOygh99ohqxWknNoV1xrYk0zRGJ2DP33IfNGtnmVFqyOo6G48PV9kvAeEcAGAm008OpjmuzWApfXDvrFQaJnD9xFqfmRiSL2mnStWvLwsGYUrG3r3szZADSVmPTkq0EFqSfmD20.o2pFJowqqSY4x6gZ1fLis2plYuzDp6aUolS9DkVFhYL7qnZFDYNvoogiEGWvqnaS80YdEcEfxOVKEpz3lYp.hA9zQY9OluwRJa3vKs9DWm9BrsgloSWuqO7lQrLxmAA3lpWnrcQRqpJxlGEYDGZRqOLUDpQrrVeFDGAFlnTFt2pwqp3VKSQmr29UrSeUqaLsckV8DqGskT91oSas4GU9K8Vseu.zm8q3epHhod7cjT.5rHgs01XfDH7FgnXZYHNlynsYh508Lqd2h7ZH0fXXq_EueOD5sW33_S.uK7gkup.dKLl390MArzZQ_r4kpeqFSYO7q8Jqe14BYxVz6GHwDNg3Sf.3ty2VCAI8xi0BuShwxdQmnpd3D5g05OKLm5JWbpPCDjfFjaijDNNF_G1upx9GBrbZJM01XchZKELY9TPFl_xV4PC4q4LF5SPzD.V.e217E49gbS10Kh9UPliak_LI2kOwHFQUSlnZDx0FfYjlqgQF7Y.Hq3WFLlivDyQlPftepyVB.A5nsgRiBTskhRAk2S.ADEGF9PXcKCgcMpzIIAqr2Da67074qqqqqqqq|vJa7h322ZAv9U89ydVP0Y8YyCV6RRJfwZVn7Y1Df6KUY38TJlFkgUQTRuVPEYlaetMbmSYUNuFowcVK38UTe98Kmb3KJ8sve7prNqo9yupUJGITxCVmyg86JyKarPYlRpwA2cYoNiATpB1bf6Ykr4El3XYq2XqbYeKDfGQUAiAkrOHAqtUr9kl20QM1Tsxblg8kp_JUaPRbpohCq3DAx4qqW8QDGriCVFMn2lRTmcmSwKk9EDc9RHlTGaKkx5llVaDsrYrT7OYpSHrCQ8mVgqqqqqqq">
<!--[if lt IE 9]><script r='m'>document.createElement("section")</script><![endif]-->
<script type="text/javascript" charset="iso-8859-1" src="/datasearch/1eeUmXQiFksL/fjtvkgf7LVI2.a670748.js"
r='m'></script>
<script type="text/javascript" r="m">
</script>
</head>
<body>
<script type='text/javascript' r='m'>
_$El('IEAy');
</script>
</body>
</html>
<script type="text/javascript" r="m">
_$2_();
</script>

File diff suppressed because one or more lines are too long

View File

@ -1,16 +0,0 @@
{
"targets":[
{
"target_name":"boda",
"sources":['./c++_src/main.cc'],
"include_dirs":['<!@(node -p "require(\'node-addon-api\').include")'],
"dependencies":['<!(node -p "require(\'node-addon-api\').gyp")'],
"cflags_cc":[
"-std-c++17"
],
"cflags!":["-fno-exceptions"],
"cflags_cc!":['-fno-exceptions'],
"defines":['NAPI_DISABLE_CPP_EXCEPTIONS']
}
]
}

View File

@ -1,37 +0,0 @@
/*
1.最新版npm
windows 管理员运行 npm install --global windows-build-tools,
如果卡在Successfully install Python2.7,就在c:\用户名\AppDate\Local\TEMP下新建
一个文件,名称dd_client_.log 内容 Closing installer. Return code: 3010.
3.npm install --global node-gyp
4.当前目录下放入bingding.gyp
5.初始化项目
1.npm init
2.npm i node-addon-api
3.安装vscode c++拓展
4.执行node-gyp configure 查看Dnode_root_dir,确认头文件 '-Dnode_root_dir=C:\\Users\\徐晓波\\AppData\\Local\\node-gyp\\Cache\\14.18.2',
5.c_cpp_properties.json(vscode ctrl+shift+p ) includePath 中加入 C:\Users\徐晓波\AppData\Local\node-gyp\Cache\14.18.2\include\node
6.编译
1.根目录放入bingding.gyp
2.cmd执行node-gyp rebuild 编译
3.报错
File "C:\Users\徐晓波\AppData\Roaming\npm\node_modules\node-gyp\gyp\pylib\gyp\input.py", line 983, in ExpandVariables
replacement = result.stdout.decode("utf-8").rstrip()
AttributeError: 'str' object has no attribute 'decode' while trying to load binding.gyp
解决办法,进入C:\Users\徐晓波\AppData\Roaming\npm\node_modules\node-gyp\gyp\pylib\gyp\input.py", line 983
修改该行代码为replacement = result.stdout.rstrip()
7.安装npm install bindings
*/

View File

@ -1,123 +0,0 @@
# -*- coding = utf-8 -*-
# @Time: 2023-02-03 22:59
# @Author: xiaobo 徐晓波
# @Site:
# @File: test.py
# @Software: PyCharm
bbb=[
'EventTarget',
'WindowProperties',
'Window',
'Node',
'Element',
'HTMLElement',
'HTMLCollection',
'NetworkInformation',
'CustomElementRegistry',
'Event',
'UIEvent',
'MouseEvent',
'Document',
'HTMLDocument',
'Location',
'Storage',
'CharacterData',
'Text',
'Database',
'CloseEvent',
'Notification',
'IDBDatabase',
'IDBRequest',
'IDBOpenDBRequest',
'IDBFactory',
'History',
'Screen',
'CSSStyleDeclaration',
'CanvasRenderingContext2D',
'WebGLRenderingContext',
'MediaQueryList',
'CSSRuleList',
'Attr',
'Navigation',
'MediaStream',
'TrustedTypePolicyFactory',
'Scheduler',
'CookieStore',
'CacheStorage',
'OffscreenCanvasRenderingContext2D',
'VisualViewport',
'BeforeInstallPromptEvent',
'BarProp',
'BaseAudioContext',
'BluetoothUUID',
'StyleMedia',
'Audio',
'Crypto',
'CDATASection',
'Comment',
'DocumentFragment',
'DocumentType',
'DOMParser',
'External',
'WebSocket',
'SourceBuffer',
'DOMStringList',
'Headers',
'IDBObjectStore',
'IDBTransaction',
'IDBVersionChangeEvent',
'TextTrackList',
'SpeechSynthesisUtterance',
'MediaEncryptedEvent',
'MutationObserver',
'NamedNodeMap',
'NodeList',
'OfflineAudioContext',
'Path2D',
'Performance',
'ScreenOrientation',
'PerformanceEntry',
'PerformancePaintTiming',
'Permissions',
'PermissionStatus',
'Request',
'SVGElement',
'SVGGraphicsElement',
'SVGPatternElement',
'SVGGeometryElement',
'SVGPathElement',
'SVGSVGElement',
'SVGSymbolElement',
'SVGUseElement',
'WebGLShader',
'WebGLShaderPrecisionFormat',
'RTCPeerConnection',
'WebGLBuffer',
'WebGLProgram',
'CSS',
'Navigator',
'BatteryManager',
'Plugin',
'PluginArray',
'MimeType',
'MimeTypeArray',
'XMLHttpRequestEventTarget',
'XMLHttpRequest',
'globalThis'
]
import os
lists=os.listdir(r'D:\My_Dir\环境框架_xbb_lastest\env')
for i in lists:
name=i.split('.')[0]
if name not in bbb:
print(name)

View File

@ -1,81 +0,0 @@
/**
*
* 安装: nodejs
* 然后: npm install vm2 npm install canvas npm install jsdom
* 提示: 建议每一个编写完事的js 建议用fd的js调试工具压缩一下减少占用行数
*
* 使用vm2之前先修改vm2本地文件
*
* 1、修改vm.js里的
* // Create a new context for this vm.
* //原本下面这句话 const _context = createContext(undefined, {
* //被修改成了这句话 const _context = createContext(options, {
* //外界在new VM的时候 把全局变量通过对象形式传递过来全局的context就会继承这个全局变量
*
*
* 2、修改contextify.js里的 搜索Contextify.setGlobal =
* (1)、try {
global[prop] = value;//Contextify.value(value); //这里是为了在调试代码里不显示proxy 已被代理
* (2)、去掉vm2特征global
* //下面这段屏蔽了
* Object.defineProperties(global, {
* global: {value: global},
* GLOBAL: {value: global},
* root: {value: global},
* isVM: {value: true}
* });
*
*
* 3、修改main.js里的
* //如果想让vm2报错不是内部错误修改890行
* throw e;//this._internal.Decontextify.value(e); //原本是这句话throw this._internal.Decontextify.value(e); 改成了 throw e
*
* 关于vm2报错本地文件但是找不到那个报错的调试文件解决方法
* const {VM,VMScript} = require("vm2");//这个是修改过的
* const CodeGenerate = require("./node_tools/CodeGenerate.js");
* //内存的概念,并非真正的内存,只是变量存储。
* let Vm2Cfg = {memory:{prototypes:{},examples:{}},DefPrototype(prototypeName,constructor,basePrototype){}};
* let savepath = `${__dirname}/vm_testScript/VM2_debug.js`; //提前把文件路径保存到变量里。
* let code = CodeGenerate(path_,savepath); //把加载完事的文件code直接写到本地
* let vm = new VM();
* let catvm = Object.assign(Vm2Cfg,{vm:this});//内存配置导入
* vm.setGlobal("catvm",catvm);//导入到全局里,这里的名字随便改,整体形成代码形式的话。就不要随意修改了。
* vm.run(new VMScript(code,savepath)); //运行前 savepath 要保存到本地,那么调试报错时才能找到位置。
*
*
* VScode 环境联调配置nodejs执行配置文件内容 launch.json
* //运行js时添加nodejs配置文件 launch.json ,测试代码路径如下:
* //C:\Users\AdministratorLr\Desktop\NewCode3_2022_10_15\.vscode\launch.json
* //配置文件内容入下:
*
*{
* "version": "0.2.0",
* "configurations": [
* {
* "name": "v1 本地调试",
* "type": "node",
* "request": "launch",
* "program": "${workspaceFolder}/index.js", //它只是跟在可执行文件后面的 一个参数了要调试的js代码不管你想执行哪个配置文件这里配置即可
* "runtimeExecutable": "D:\\nodejs\\node.exe" // 这里是 v16 版本的node路径不管你安装几个版本的node都可以指定全局配置。这里配置完就可以随意切换了
* },
* {
* "name": "v2 浏览器无环境联调",
* "type": "node",
* "request": "launch",
* "program": "--inspect-brk", //它只是跟在可执行文件后面的 一个参数了
* "args": ["${workspaceFolder}/index.js"],//它只是跟在可执行文件后面的 一个参数了
* "runtimeExecutable": "D:\\nodejs\\node.exe" // 这里是 v16 版本的node路径不管你安装几个版本的node都可以指定全局配置。这里配置完就可以随意切换了
* },
* {
* "name": "v3 cmd参数详解", //演示所有参数的含义 , 控制台执行的结果是: D:\nodejs\node.exe args1 args2 args3 args4 args5 所以根据想要的功能自行设定和删减
* "type": "node",
* "request": "launch",
* "program": "args3", //它只是跟在可执行文件后面的 一个参数了
* "args": ["args4", "args5"],//它只是跟在可执行文件后面的 一个参数了
* "runtimeArgs": ["args1", "args2"],//它只是跟在可执行文件后面的 一个参数了
* "runtimeExecutable": "D:\\nodejs\\node.exe" // 这里是 v16 版本的node路径不管你安装几个版本的node都可以指定全局配置。这里配置完就可以随意切换了
* }
* ]
*}
*
**/

View File

@ -1,146 +0,0 @@
//全局对象配置
var myloglist=[]
var myloglistindex=0
bodavm = {
"toolsFunc": {}, //功能函数相关,插件
"envFunc": {},//环境相关
"config": {}, //配置相关
"memory":{},
"toolsPlugin": {} //Plugin相关
}
bodavm.config.isdebug=false; //是否开启debugger
bodavm.config.proxy = false; //是否代理
bodavm.config.printLog=true; //是否打开日志
bodavm.memory.isproxy= {}
bodavm.memory.filterProxyProp=['toJSON','undefined','splice','String','fromCharCode','apply','prototype','__proto__','toString','Object','Array',"eval",'Symbol(Symbol.toStringTag)','Symbol.toStringTag','bodavm.memory.symbolData',"Symbol(Symbol.species)",'Symbol(Symbol.hasInstance)'] //需要过滤 的属性
bodavm.memory.symbolData=Symbol("data") //用来保存当前对象上的原型属性
bodavm.memory.globalInit={}
//存储tag标签
bodavm.memory.tag=[]
// bodavm.memory.localStorage={};
bodavm.memory.cookie1='' //用来存储555
bodavm.memory.cookie2={} //用来存储"a=10"
bodavm.memory.cookie=''; //拼接cookie1 和cookie2
bodavm.memory.asyncEvent={};
bodavm.memory.globalInit.timeoutID=0;
// "Verdana;Helvetica Neue LT Pro 35 Thin;tahoma;verdana;times new roman;Courier New;Microsoft Himalaya;helvetica;LG-FZKaTong-M19-V2.2;Georgia;georgia;courier new;Arial;arial;cursive;times;fantasy;courier;serif;monospace;Times New Roman"
bodavm.memory.globalInit.fontList = ["SimHei", "SimSun", "NSimSun", "FangSong", "KaiTi",'Verdana','tahoma','helvetica','Georgia','georgia','Arial','arial','cursive','fantasy','courier','serif','monospace'];
bodavm.memory.font={
"font-family":'',
"fontFamily":''
}
bodavm.memory.location={
origin:"http://101.43.230.100",
hash:"",
pathname:"/",
search:"",
href:"http://101.43.230.100/",
port:"",
protocol:"http:",
host:"101.43.230.100",
ancestorOrigins:"{}",
hostname:"101.43.230.100"
};
bodavm.memory.document={
URL:"http://101.43.230.100/",
referrer:"",
documentURI:"http://101.43.230.100/",
compatMode:"CSS1Compat",
dir:"",
title:"QQ会员等级 - QQ等级 - 好莱坞等级 查询",
designMode:"off",
readyState:"complete",
contentType:"text/html",
inputEncoding:"UTF-8",
domain:"101.43.230.100",
characterSet:"UTF-8",
charset:"UTF-8",
hidden:"false",
onmousemove:"null",
onselectionchange:"null",
};
bodavm.memory.htmldivelement={
align:"undefined",
};
bodavm.memory.history={
scrollRestoration:"auto"
};
bodavm.memory.screen={
width:1440,
height:960,
availWidth:1440,
availHeight:920,
pixelDepth:24,
colorDepth:24,
availLeft:0,
availTop:0,
isExtended:undefined,
orientation:{},
onchange:undefined,
};
bodavm.memory.navigator={
language:"zh-CN",
userAgent:"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36",
appVersion:"5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36",
vendor:"Google Inc.",
appName:"Netscape",
appCodeName:"Mozilla",
cookieEnabled:true,
languages:["zh-CN","zh"],
productSub:"20030107",
userAgentData:undefined,
xr:undefined,
platform:'Win32',
webkitPersistentStorage:{},
connection:{},
javaEnabled:false
};
bodavm.memory.window={
indexedDB:{},
name:"",
};
bodavm.memory.canvas={};
bodavm.memory.canvas2D={
direction: "ltr",
fillStyle: "#000000",
filter: "none",
font: "10px sans-serif",
fontKerning: "auto",
fontStretch: "normal",
fontVariantCaps: "normal",
globalAlpha: 1,
globalCompositeOperation: "source-over",
imageSmoothingEnabled: true,
imageSmoothingQuality: "low",
letterSpacing: "0px",
lineCap: "butt",
lineDashOffset: 0,
lineJoin: "miter",
lineWidth: 1,
miterLimit: 10,
shadowBlur: 0,
shadowColor: "rgba(0, 0, 0, 0)",
shadowOffsetX: 0,
shadowOffsetY: 0,
strokeStyle: "#000000",
textAlign: "start",
textBaseline: "alphabetic",
textRendering: "auto",
wordSpacing: "0px",
}
// bodavm.memory.localStorage={}

File diff suppressed because one or more lines are too long

View File

@ -1,230 +0,0 @@
// 代理器失效 1.没有使用代理对象 2.代理器脱钩 目标代码通过 this 绕过代理器
// 解决办法
window = this;
window = new Proxy(window, this)
// globalThis=new Proxy(globalThis,'globalThis')
// window.mythis=function(){
/// 网站扣下的代码
// }
// mythis()
//2自执行
for (let name in global) {
switch (name) {
case "window":
continue;
case "global":
continue;
}
window[name] = global[name];
delete global[name];
}
window = myProxy(window, "window");
Object.setPrototypeOf(global, window);
!function () { }()
//全局hook
bobomyHookfilter={
'location':true,
'Function':true,
'Object':true,
'window':true,
'Window':true,
'document':true,
'bobomyHook':true,
"hookObjs":true,
'objlist':true,
'JSON':true,
'bobomyHookfilter':true,
'Math':true,
'Intl':true,
'Reflect':true,
'console':true,
'CSS':true,
'Atomics':true,
'top':true,
}
hookObjs = {
}
objlist=[
{
'name':"window",
'obj':window
},
{
'name':"document",
'obj':document
},
{
'name':"screen",
'obj':screen
},
{
'name':"history",
'obj':history
},
{
'name':"localStorage",
'obj':localStorage
},
{
'name':'navigation',
'obj':navigation
},
{
'name':'webkitStorageInfo',
'obj':webkitStorageInfo
},
{
'name':'speechSynthesis',
'obj':speechSynthesis
},
{
'name':'sessionStorage',
'obj':sessionStorage
},
{
'name':'customElements',
'obj':customElements
},
{
'name':'clientInformation',
'obj':clientInformation
},
{
'name':'menubar',
'obj':menubar
},
{
'name':'toolbar',
'obj':toolbar
},
{
'name':'visualViewport',
'obj':visualViewport
},
{
'name':'styleMedia',
'obj':styleMedia
},
{
'name':'scheduler',
'obj':scheduler
},
{
'name':'indexedDB',
'obj':indexedDB
},
{
'name':'trustedTypes',
'obj':trustedTypes
},
{
'name':'cookieStore',
'obj':cookieStore
},
{
'name':'external',
'obj':external
}
]
for (let i = 0; i < objlist.length; i++) {
let name = objlist[i]['name'];
let obj= objlist[i]['obj']
hookObjs[name] = {}
bobomyHook(obj,name)
}
function bobomyHook(obj,name) {
let boboobjname = Object.getOwnPropertyNames(obj)
for (let i =0; i<boboobjname.length;i++) {
//i name
if (bobomyHookfilter[boboobjname[i]]){continue}
let bobodesc = Object.getOwnPropertyDescriptor(obj, boboobjname[i])
// console.log(bobodesc)
let boboconfigurable_ = bobodesc['configurable']
let boboenumerable_ = bobodesc['enumerable']
let bobovalue_ = bobodesc['value']
let bobowritable_ = bobodesc['writable']
let boboget_ = bobodesc['get']
let boboset_ = bobodesc['set']
// console.log(bobodesc)
// get set 与value writable不能共存 configurable enumerable这两个是肯定有的
try{
if (boboget_ || boboset_) {
hookObjs[name][boboobjname[i] + '_get'] = boboget_
hookObjs[name][boboobjname[i] + '_set'] = boboset_
const myvalue=boboobjname[i]
Object.defineProperty(obj,myvalue,{
configurable:boboconfigurable_,
enumerable:boboenumerable_,
get:boboget_?function (){
let args=arguments
let result=hookObjs[name][myvalue + '_get'].apply(this,arguments)
console.log(`${name} get-> ${myvalue} arg->${JSON.stringify(args)} -> result -> ${result}`)
return result
}:undefined,
set:boboset_?function(){
let args=arguments
let result=hookObjs[name][myvalue + '_set'].apply(this,arguments)
console.log(`${name} set-> ${myvalue} -> arg->${JSON.stringify(args)} value -> ${result}`)
return result
}:undefined
})
} else {
hookObjs[name][boboobjname[i] + '_value']=bobovalue_
if (typeof bobovalue_ =='object'){
const myvalue=boboobjname[i]
console.log(`${name} value-> ${myvalue} result ->${bobovalue_}`);
Object.defineProperty(obj,boboobjname[i],{
configurable:boboconfigurable_,
enumerable:boboenumerable_,
writable:bobowritable_,
value:bobovalue_
})
}else if (typeof bobovalue_ =='function'){
const myvalue=boboobjname[i]
Object.defineProperty(obj,boboobjname[i],{
configurable:boboconfigurable_,
enumerable:boboenumerable_,
writable:bobowritable_,
value:function (){
let args=arguments
let result=hookObjs[name][myvalue + '_value'].apply(this,arguments)
console.log(`${name} value apply -> ${myvalue} arg->${JSON.stringify(args)} result ->${result}`);
return result
}
})
}
}
}catch{}
}
if (obj.__proto__ !=null){
bobomyHook(obj.__proto__,name)
}
}
// window.atob('123')

View File

@ -1 +0,0 @@
JSON.stringify(console)

View File

@ -1,26 +0,0 @@
<div id="parentElement">
<span id="childElement">foo bar</span>
</div>
{/* <script> */}
// 创建要插入的节点
var newNode = document.createElement("span");
// 获得父节点的引用
var parentDiv = document.getElementById("childElement").parentNode;
//实验一referenceNode 存在 --> 正确返回
var sp2 = document.getElementById("childElement");
parentDiv.insertBefore(newNode, sp2);
//实验一结束
//实验二referenceNode 为 undefined
var sp2 = undefined; // Not exist a node of id "childElement"
parentDiv.insertBefore(newNode, sp2); //隐式转换到节点类型
//实验二结束
//实验三referenceNode 为字符类型的 "undefined"
var sp2 = "undefined"; //不存在 id 为"childElement"的 referenceNode
parentDiv.insertBefore(newNode, sp2); // Generate "Type Error: Invalid Argument"
//实验三结束
{/* </script> */}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,46 +0,0 @@
(function n(i, r, t, e, l, a, f, u) {
var c, o, h, s, p, g, m, y, d, v, w, b, C, F, j, S, k, q, x, z, A, B, D, E, G, H, I, J, K, L, M, N, O, P, Q, R, T,
U, V;
if (this.constructor != n) {
if (e || ((e = [this]).n = e[0], e.t = [], (o = {}).s = !1, o.v = !1, e.t.push(o), n.r = n.g = n), h = e[e.length - 1], -3 == t || -2 == t) {
if (-2 == t) {
for (a = 0, f = 0; i[r] > 127;) f += i[r++] - 128 << 7 * a++;
f += i[r++] << 7 * a
} else f = (r = (s = n(i, r, -2)).i) + (a = s.n) - 1, r += a;
return {n: f, i: r}
}
if (l === n) {
for (p = new n.g, g = [].slice.call(u), m = 0; m < a.length; m++) p[a[m]] = g[m];
return p.arguments = u, (y = [].concat(e).concat(p)).n = f, y.t = [], n(i, r, t, y)
}
if (d = r || 0, c = t || i.length, v = i[d++], s = n(i, d, -2), d = s.i, s.n, w = 0, 6 == v || 10 == v ? w = 1 : 30 == v ? w = 2 : 29 == v && (w = 3), 6 == v || 10 == v || 30 == v || 29 == v) {
for (o = e.t && e.t[e.t.length - 1], b = []; d < c;) {
if (C = d++, s = n(i, d, -3), d = s.i, F = s.n, b.push(n(i, C, F, e)), 3 != w && e.a) return b[b.length - 1];
if (2 == w && o && (o.v || o.s)) return b[b.length - 1]
}
if (2 != w) return b
}
if (25 == v) {
if (j = n(i, d++, (s = n(i, d, -3), d = s.i, s.n), e), g = n(i, d++, (s = n(i, d, -3), d = s.i, s.n), e), n.bind) return new (n.bind.apply(j, [null].concat(g)));
for (S = [], m = 0; m < g.length; m++) S[m] = "a[" + m + "]";
return n.constructor("F,a", "return new F(" + S.join(",") + ")")(j, g)
}
if (80 != v) {
if (125 == v) throw n(i, d++, (s = n(i, d, -3), d = s.i, s.n), e);
if (18 == v || 113 == v) {
for (I = i[d++], s = n(i, d, -2), d = s.i, J = s.n, K = [], m = 0; m < J; m++) s = n(i, d, -2), d = s.i, L = s.n, K.push(L);
return M = String.fromCharCode.apply(null, K), 113 == v || e.m ? M : l ? [e[I], M] : e[I][M]
}
return 0 == v ? (e.m = !0, N = n(i, d++, (s = n(i, d, -3), d = s.i, s.n), e), e.m = !1, h[N] = e.u, n(i, d++, (s = n(i, d, -3), d = s.i, s.n), e)) : 67 == v ? (91 == i[d++] && (O = i[d++]), O) : 34 == v ? a != f : 89 == v ? n(i, d++, (s = n(i, d, -3), d = s.i, s.n), e) : 58 == v ? null : 57 == v ? n(i, d++, (s = n(i, d, -3), d = s.i, s.n), e, 0, n(i, d++, (s = n(i, d, -3), d = s.i, s.n), e), n(i, d++, (s = n(i, d, -3), d = s.i, s.n), e)) : 78 == v ? (P = n(i, d++, (s = n(i, d, -3), d = s.i, s.n), e), Q = n(i, d++, (s = n(i, d, -3), d = s.i, s.n), e), e.m = !P, R = n(i, d++, (s = n(i, d, -3), d = s.i, s.n), e), e.m = !1, l ? [Q, R] : Q[R]) : 88 == v ? n(i, d++, (s = n(i, d, -3), d = s.i, s.n), e) ? n(i, d++, (s = n(i, d, -3), d = s.i, s.n), e) : (s = n(i, ++d, -3), d = s.i, s.n, n(i, d++, (s = n(i, d, -3), d = s.i, s.n), e)) : 95 == v ? (T = n(i, d++, (s = n(i, d, -3), d = s.i, s.n), e, !0), U = n(i, d++, (s = n(i, d, -3), d = s.i, s.n), e), T instanceof n.constructor ? n.apply.call(T, e[0].n, U) : (V = T[0][T[1]], T[0] instanceof n.g ? n.apply.call(V, e.n, U) : n.apply.call(V, T[0], U))) : void 0
}
k = d++, s = n(i, d, -3), d = s.i, q = s.n, x = d++, s = n(i, d, -3), d = s.i, z = s.n, A = d++, s = n(i, d, -3), d = s.i, B = s.n;
try {
if (D = n(i, k, q, e), e.a) return D
} catch (W) {
if (e.u = W, E = n(i, x, z, e), e.a) return E
} finally {
if (G = e.a, e.a = !1, H = n(i, A, B, e), e.a) return H;
e.a = G
}
}
})([6, 198, 8, 10, 195, 8, 80, 192, 8, 30, 252, 7, 30, 249, 7, 88, 154, 1, 57, 127, 34, 0, 78, 111, 67, 2, 91, 0, 78, 97, 67, 2, 91, 0, 95, 84, 78, 42, 67, 2, 91, 0, 18, 8, 0, 6, 79, 98, 106, 101, 99, 116, 18, 26, 0, 24, 103, 101, 116, 79, 119, 110, 80, 114, 111, 112, 101, 114, 116, 121, 68, 101, 115, 99, 114, 105, 112, 116, 111, 114, 29, 38, 78, 28, 67, 2, 91, 0, 18, 10, 0, 8, 100, 111, 99, 117, 109, 101, 110, 116, 18, 10, 0, 8, 108, 111, 99, 97, 116, 105, 111, 110, 113, 6, 0, 4, 104, 114, 101, 102, 18, 5, 0, 3, 103, 101, 116, 18, 6, 0, 4, 110, 97, 109, 101, 113, 10, 0, 8, 103, 101, 116, 32, 104, 114, 101, 102, 30, 21, 30, 19, 125, 17, 25, 15, 18, 7, 0, 5, 69, 114, 114, 111, 114, 29, 4, 113, 2, 0, 0, 58, 0, 88, 154, 1, 57, 127, 34, 0, 78, 111, 67, 2, 91, 0, 78, 97, 67, 2, 91, 0, 95, 84, 78, 42, 67, 2, 91, 0, 18, 8, 0, 6, 79, 98, 106, 101, 99, 116, 18, 26, 0, 24, 103, 101, 116, 79, 119, 110, 80, 114, 111, 112, 101, 114, 116, 121, 68, 101, 115, 99, 114, 105, 112, 116, 111, 114, 29, 38, 78, 28, 67, 2, 91, 0, 18, 10, 0, 8, 100, 111, 99, 117, 109, 101, 110, 116, 18, 10, 0, 8, 108, 111, 99, 97, 116, 105, 111, 110, 113, 6, 0, 4, 104, 97, 115, 104, 18, 5, 0, 3, 103, 101, 116, 18, 6, 0, 4, 110, 97, 109, 101, 113, 10, 0, 8, 103, 101, 116, 32, 104, 97, 115, 104, 30, 21, 30, 19, 125, 17, 25, 15, 18, 7, 0, 5, 69, 114, 114, 111, 114, 29, 4, 113, 2, 0, 0, 58, 0, 88, 154, 1, 57, 127, 34, 0, 78, 111, 67, 2, 91, 0, 78, 97, 67, 2, 91, 0, 95, 84, 78, 42, 67, 2, 91, 0, 18, 8, 0, 6, 79, 98, 106, 101, 99, 116, 18, 26, 0, 24, 103, 101, 116, 79, 119, 110, 80, 114, 111, 112, 101, 114, 116, 121, 68, 101, 115, 99, 114, 105, 112, 116, 111, 114, 29, 38, 78, 28, 67, 2, 91, 0, 18, 10, 0, 8, 100, 111, 99, 117, 109, 101, 110, 116, 18, 10, 0, 8, 108, 111, 99, 97, 116, 105, 111, 110, 113, 6, 0, 4, 104, 111, 115, 116, 18, 5, 0, 3, 103, 101, 116, 18, 6, 0, 4, 110, 97, 109, 101, 113, 10, 0, 8, 103, 101, 116, 32, 104, 111, 115, 116, 30, 21, 30, 19, 125, 17, 25, 15, 18, 7, 0, 5, 69, 114, 114, 111, 114, 29, 4, 113, 2, 0, 0, 58, 0, 88, 163, 1, 57, 135, 1, 34, 0, 78, 115, 67, 2, 91, 0, 78, 101, 67, 2, 91, 0, 95, 88, 78, 42, 67, 2, 91, 0, 18, 8, 0, 6, 79, 98, 106, 101, 99, 116, 18, 26, 0, 24, 103, 101, 116, 79, 119, 110, 80, 114, 111, 112, 101, 114, 116, 121, 68, 101, 115, 99, 114, 105, 112, 116, 111, 114, 29, 42, 78, 28, 67, 2, 91, 0, 18, 10, 0, 8, 100, 111, 99, 117, 109, 101, 110, 116, 18, 10, 0, 8, 108, 111, 99, 97, 116, 105, 111, 110, 113, 10, 0, 8, 112, 114, 111, 116, 111, 99, 111, 108, 18, 5, 0, 3, 103, 101, 116, 18, 6, 0, 4, 110, 97, 109, 101, 113, 14, 0, 12, 103, 101, 116, 32, 112, 114, 111, 116, 111, 99, 111, 108, 30, 21, 30, 19, 125, 17, 25, 15, 18, 7, 0, 5, 69, 114, 114, 111, 114, 29, 4, 113, 2, 0, 0, 58, 0, 88, 159, 1, 57, 131, 1, 34, 0, 78, 113, 67, 2, 91, 0, 78, 99, 67, 2, 91, 0, 95, 86, 78, 42, 67, 2, 91, 0, 18, 8, 0, 6, 79, 98, 106, 101, 99, 116, 18, 26, 0, 24, 103, 101, 116, 79, 119, 110, 80, 114, 111, 112, 101, 114, 116, 121, 68, 101, 115, 99, 114, 105, 112, 116, 111, 114, 29, 40, 78, 28, 67, 2, 91, 0, 18, 10, 0, 8, 100, 111, 99, 117, 109, 101, 110, 116, 18, 10, 0, 8, 108, 111, 99, 97, 116, 105, 111, 110, 113, 8, 0, 6, 111, 114, 105, 103, 105, 110, 18, 5, 0, 3, 103, 101, 116, 18, 6, 0, 4, 110, 97, 109, 101, 113, 12, 0, 10, 103, 101, 116, 32, 111, 114, 105, 103, 105, 110, 30, 21, 30, 19, 125, 17, 25, 15, 18, 7, 0, 5, 69, 114, 114, 111, 114, 29, 4, 113, 2, 0, 0, 58, 0, 88, 163, 1, 57, 135, 1, 34, 0, 78, 115, 67, 2, 91, 0, 78, 101, 67, 2, 91, 0, 95, 88, 78, 42, 67, 2, 91, 0, 18, 8, 0, 6, 79, 98, 106, 101, 99, 116, 18, 26, 0, 24, 103, 101, 116, 79, 119, 110, 80, 114, 111, 112, 101, 114, 116, 121, 68, 101, 115, 99, 114, 105, 112, 116, 111, 114, 29, 42, 78, 28, 67, 2, 91, 0, 18, 10, 0, 8, 100, 111, 99, 117, 109, 101, 110, 116, 18, 10, 0, 8, 108, 111, 99, 97, 116, 105, 111, 110, 113, 10, 0, 8, 104, 111, 115, 116, 110, 97, 109, 101, 18, 5, 0, 3, 103, 101, 116, 18, 6, 0, 4, 110, 97, 109, 101, 113, 14, 0, 12, 103, 101, 116, 32, 104, 111, 115, 116, 110, 97, 109, 101, 30, 21, 30, 19, 125, 17, 25, 15, 18, 7, 0, 5, 69, 114, 114, 111, 114, 29, 4, 113, 2, 0, 0, 58, 0, 89, 50, 95, 48, 78, 22, 67, 2, 91, 0, 18, 9, 0, 7, 99, 111, 110, 115, 111, 108, 101, 18, 5, 0, 3, 108, 111, 103, 29, 22, 113, 20, 0, 6, 175, 231, 1, 131, 177, 1, 161, 208, 1, 140, 181, 2, 144, 196, 1, 159, 165, 1, 0, 61, 18, 3, 0, 1, 101, 30, 54, 30, 52, 89, 50, 95, 48, 78, 22, 67, 2, 91, 0, 18, 9, 0, 7, 99, 111, 110, 115, 111, 108, 101, 18, 5, 0, 3, 108, 111, 103, 29, 22, 113, 20, 0, 6, 175, 231, 1, 131, 177, 1, 161, 208, 1, 140, 181, 2, 177, 178, 1, 165, 154, 2, 58, 0]);

File diff suppressed because one or more lines are too long

View File

@ -1,11 +0,0 @@
<body id="oldBodyElement"></body>
alert(document.body.id); // "oldBodyElement"
var aNewBodyElement = document.createElement("body");
aNewBodyElement.id = "newBodyElement";
document.body = aNewBodyElement;
alert(document.body.id); // "newBodyElement"

View File

@ -1,57 +0,0 @@
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>getElementsByTagName example</title>
</head>
<body style="border: solid green 3px">
<p>Some outer text</p>
<p>Some outer text</p>
<div id="div1" style="border: solid blue 3px">
<p>Some div1 text</p>
<p>Some div1 text</p>
<p>Some div1 text</p>
<div id="div2" style="border: solid red 3px">
<p>Some div2 text</p>
<p>Some div2 text</p>
</div>
</div>
<p>Some outer text</p>
<p>Some outer text</p>
<button onclick="getAllParaElems();">
show all p elements in document</button><br />
<button onclick="div1ParaElems();">
show all p elements in div1 element</button><br />
<button onclick="div2ParaElems();">
show all p elements in div2 element</button>
</body>
</html>
`
<script>
function getAllParaElems() {
var allParas = document.getElementsByTagName("p");
var num = allParas.length;
alert("There are " + num + " paragraph in this document");
}
function div1ParaElems() {
var div1 = document.getElementById("div1");
var div1Paras = div1.getElementsByTagName("p");
var num = div1Paras.length;
alert("There are " + num + " paragraph in #div1");
}
function div2ParaElems() {
var div2 = document.getElementById("div2");
var div2Paras = div2.getElementsByTagName("p");
var num = div2Paras.length;
alert("There are " + num + " paragraph in #div2");
}
</script>`

View File

@ -1,21 +0,0 @@
<html>
<body>
<div id="parent-id">
<p>hello world 1</p>
<p class="test">hello world 2</p>
<p>hello world 3</p>
<p>hello world 4</p>
</div>
<script>
var parentDOM = document.getElementById("parent-id");
var test = parentDOM.getElementsByClassName("test"); // 匹配类名的元素集合,不是元素本身
console.log(test); //HTMLCollection[1]
var testTarget = parentDOM.getElementsByClassName("test")[0]; // 我们想要取到的第一个元素
console.log(testTarget); //<p class="test">hello world 2</p>
</script>
</body>
</html>

File diff suppressed because one or more lines are too long

View File

@ -1,29 +0,0 @@
// <!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<div id="bb">
<div class="box1"></div>
<div class="box">
<p title="hhhh">第1</p>
<p dataId="2">第2</p>
<p>第3</p>
<p>第4</p>
</div>
<div class="box2"></div>
</div>
<script
type="text/javascript"> ;
</script>
</body>
</html>
console.log(pp.parentNode);
console.log(pp.parentElement);
console.log(pp.parentElement.parentElement.parentElement.parentElement.nodeName); //报错000.html:37 Uncaught TypeError: Cannot read property 'nodeName' of null
console.log(pp.parentNode.parentNode.parentNode.parentNode.nodeName);// #document

View File

@ -1,3 +0,0 @@
navigator.getBattery()
StorageManager.prototype.estimate()
navigator.storage.estimate()

View File

@ -1,23 +0,0 @@
// <!--Sample HTML code-->
<div id="top" align="center"> </div>
{/* <script type="text/javascript"> */}
var top = document.getElementById("top");
var nested = document.getElementById("nested");
var garbage = top.removeChild(nested);
//Test Case 2: the method throws the exception (2)
{/* </script> */}
// <!--Sample HTML code-->
<div id="top" align="center">
<div id="nested"></div>
</div>
{/* <script type="text/javascript"> */}
var top = document.getElementById("top");
var nested = document.getElementById("nested");
var garbage = top.removeChild(nested);
// This first call remove correctly the node
garbage = top.removeChild(nested);
// Test Case 1: the method in the second call here, throws the exception (1)
// </script>

File diff suppressed because one or more lines are too long

View File

@ -1,8 +0,0 @@
console.log(top==window)
console.log(top==parent)
console.log(top.self==window)
console.log(top.self.window==window.top.self)
console.log(self.window.top==top.window.self);
console.log(self.window.top.self.top==top.window.self);
console.log(self.window.top.self.top==top.window.self.window);

File diff suppressed because one or more lines are too long

View File

@ -1,111 +0,0 @@
//WindowProperties 删除构造方法
delete WindowProperties.prototype.constructor;
//代理失效
var window_=this; 底下用window_
//两个都需要补
Object.getOwnPropertyDescriptors(Window)
Object.getOwnPropertyDescriptors(Window.prototype)
//location检测
//代理检测
// self=window;
// top=window
// window==self ; ///true
// window =new Proxy(window,{});
// window==self;//false
//需要连续赋值,可以过代理检测
// top=self=window=new Proxy(window,{})
//解决重复代理
bodavm.memory.symbolProxy=Symbol("proxy") //独一无二的属性,标记是否代理
if (bodavm.memory.symbolProxy in obj){
return obj
}
//解决重复代理
Object.defineProperty(obj,bodavm.memory.symbolProxy,{
configurable:false,
enumerable:false,
writable:false,
value:true
})
//代理失效 ,代理的对象没有被代理上
console.log(document.createElement===document.createElement)
//实现Document.prototype.activeElement()调用报错
if(Object.getOwnPropertyDescriptor(obj,"constructor")!==undefined){
if (Object.getOwnPropertyDescriptor(self,"constructor") !==undefined){
return bodavm.toolsFunc.throwError("TypeError","Illegal invocation")
}
}
//过滤bodavm.memory.symbolProxy与"eval"
//node环境和vm2环境中的监测点过滤
// 删除浏览器中不存在的对象
delete global;
delete GLOBAL;
delete VMError;
delete Buffer;
delete WindowProperties
delete process;
delete root;
//在原型对象上不能通过原型对象获取,不在自身上可以通过自身获取
a=document.createElement("div")
a.align=123
Object.getOwnPropertyDescriptors(a,'align')
//鼠标轨迹
//检测点
function test(){}
Object.getOwnPropertyDescriptor(window,'test')
//
var r={}
r.__proto__=document
r.location
var b={}
b=Screen.prototype
b.width
var b={}
b.__proto__=Screen.prototype
b.width
//document.all
//window.length iframe
// JSON.stringify(console)
"FSSBBIl1UgzbN7N80T=4B.zKNh3jQsKMZLAyeqQs7QJwaZPeSafzY3KH2cdc0RyVUYgsIPrb_buCwzg59VBqHJbjQAXky9B_J5am_szA1nWrHhagAii3e0x52q2c0st02n4qjdiGKI_Q5W2b2xEaLujGn0notNXB0uevYFRYKwQ0R.naBqJsjWQK8SQD9HVg8kzNCXC0W1OLMLWFS4AGvo2i_BMtcTi.IyV2X5xsDcz9;"

File diff suppressed because one or more lines are too long

View File

@ -1,36 +0,0 @@
<html>
<head>
<title>浏览器事件补齐</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<div id="testDiv" style="width: 100px;height: 100px;background-color: red">
</div>
</body>
<script>
window.addEventListener("load", function (event) {
debugger
let span = document.createElement("span");
if (event.isTrusted) {
span.id = "loadTest";
span.innerText = "load事件触发";
document.body.append(span);
};
});
document.getElementById("testDiv").addEventListener("click", function (event) {
debugger
if (event.isTrusted) {
event.target.innerText = "testDiv被点击";
};
});
</script>
</html>

View File

@ -1,943 +0,0 @@
"<span style="font-family:mmllii;font-size:114px">mmmmmmmmmmmlliii</span>" offsetWidth :1327 offsetHeight:151
DFPhelvetica 1327 151
"Tibetan Machine Uni" 1327 151
Cooljazz 1327 151
Verdana 1376 139
Helvetica Neue LT Pro 35 Thin 1376 139
tahoma 1184 137
"LG Smart_H test Regular" 1327 151
DINPro-light 1327 151
DINPro-light 1327 151
HelveM_India 1327 151
"SECRobotoLight Bold" 1327 151
"OR Mohanty Unicode Regular" 1327 151
"Droid Sans Thai" 1327 151
"Kannada Sangam MN" 1327 151
"DDC Uchen" 1327 151
"DDC Uchen" 1327 151
SamsungKannadaRegular 1327 151
"MI LANTING Bold" 1327 151
"SamsungSansNum3L Light" 1327 151
verdana 1376 139
HelveticaNeueThin 1327 151
SECFallback 1327 151
SamsungEmoji 1327 151
"Telugu Sangam MN" 1327 151
"Carrois Gothic SC" 1327 151
"Flyme Light Roboto Light" 1327 151
"SoMA-Digit Light" 1327 151
"SoMC Sans Regular" 1327 151
HYXiYuanJ 1327 151
sst 1327 151
samsung-sans-num4T 1327 151
gm_mengmeng 1327 151
"Lohit Kannada" 1327 151
"times new roman" 1134 126
samsung-sans-num4L 1327 151
serif-monospace 1327 151
"SamsungSansNum-3T Thin" 1327 151
ColorOSUI-XThin 1327 151
"Droid Naskh Shift Alt" 1327 151
SamsungTeluguRegular 1327 151
"Bengali OTS" 1327 151
"MI LanTing_GB Outside YS" 1327 151
FZMiaoWu_GB18030 1327 151
helve-neue-regular 1327 151
"SST Medium" 1327 151
"Courier New" 1095 129
"Khmer Mondulkiri Bold" 1327 151
"Khmer Mondulkiri Bold" 1327 151
"Khmer Mondulkiri Bold" 1327 151
"Roboto Medium" 1327 151
"Droid Sans Bold" 1327 151
goudy 1327 151
sans-serif-condensed-light 1327 151
SFinder 1327 151
noto-sans-cjk-medium 1327 151
miui 1327 151
"MRocky PRC Bold" 1327 151
"AndroidClock Regular" 1327 151
"SamsungSansNum-4L Light" 1327 151
sans-serif-thin 1327 151
AaPangYaer 1327 151
casual 1327 151
"BN MohantyOT Bold" 1327 151
x-sst 1327 151
NotoSansMyanmarZawgyi 1327 151
NotoSansMyanmarZawgyi 1327 151
"AshleyScriptMT Alt" 1327 151
"Noto Sans Devanagari UI" 1327 151
"Roboto Condensed Bold" 1327 151
"Roboto Medium Italic" 1327 151
miuiex 1327 151
"Noto Sans Gurmukhi UI" 1327 151
"SST Vietnamese Light" 1327 151
LG_Oriya 1327 151
hycoffee 1327 151
x-sst-ultralight 1327 151
DFHeiAW7-A 1327 151
FZZWXBTOT_Unicode 1327 151
"Devanagari Sangam MN Bold" 1327 151
sans-serif-monospace 1327 151
"Padauk Book Bold" 1327 151
"Padauk Book Bold" 1327 151
"Padauk Book Bold" 1327 151
"Padauk Book Bold" 1327 151
"Microsoft Himalaya" 759 114
SamsungSansFallback 1327 151
"SST Medium Italic" 1327 151
AndroidEmoji 1327 151
SamsungSansNum-3R 1327 151
"ITC Stone Serif" 1327 151
sans-serif-smallcaps 1327 151
x-sst-medium 1327 151
LG_Sinhalese 1327 151
"Roboto Thin Italic" 1327 151
century-gothic 1327 151
Clockopia 1327 151
Luminous_Sans 1327 151
"Floridian Script Alt" 1327 151
"Noto Sans Gurmukhi Bold" 1327 151
"LTHYSZK Bold" 1327 151
GS_Thai 1327 151
SamsungNeoNum_3T_2 1327 151
Arabic 1327 151
hans-sans-normal 1327 151
"Lohit Telugu" 1327 151
"HYQiHei-50S Light" 1327 151
"Lindsey for Samsung" 1327 151
"AR Crystalhei DB" 1327 151
"Samsung Sans Medium" 1327 151
samsung-sans-num45 1327 151
hans-sans-bold 1327 151
Luminous_Script 1327 151
"SST Condensed" 1327 151
SamsungDevanagariRegular 1327 151
"Anjal Malayalam MN" 1327 151
"Anjal Malayalam MN" 1327 151
FZLanTingHei-M-GB18030 1327 151
"Hebrew OTS" 1327 151
"Hebrew OTS" 1327 151
"Samsung Sans Light" 1327 151
"Choco cooky" 1327 151
helve-neue-thin 1327 151
"PN MohantyOT Medium" 1327 151
"PN MohantyOT Medium" 1327 151
"Droid Serif" 1327 151
SamsungSinhalaRegular 1327 151
helvetica 1171 127
LG-FZKaTong-M19-V2.2 1171 127
"Noto Sans Devanagari UI Bold" 1327 151
"SST Light" 1327 151
DFPEmoji 1327 151
"weatherfontnew Regular" 1327 151
RobotoNum3R 1327 151
DINPro-medium 1327 151
"Samsung Sans Num55" 1327 151
"SST Heavy Italic" 1327 151
"LGlock4 Regular_0805" 1327 151
Georgia 1270 129
noto-sans-cjk 1327 151
"Telugu Sangam MN Bold" 1327 151
"MIUI EX Normal" 1327 151
"HYQiHei-75S Bold" 1327 151
"NotoSansMyanmarZawgyi Bold" 1327 151
yunospro-black 1327 151
helve-neue-normal 1327 151
Luminous_Serif 1327 151
"TM MohantyOT Normal" 1327 151
"SamsungSansNum-3Lv Light" 1327 151
"Samsung Sans Num45" 1327 151
"SmartGothic Medium" 1327 151
georgia 1270 129
casual-font-type 1327 151
"Samsung Sans Bold" 1327 151
small-capitals 1327 151
"MFinance PRC Bold" 1327 151
FZLanTingHei_GB18030 1327 151
SamsungArmenian 1327 151
"Roboto Bold" 1327 151
century-gothic-bold 1327 151
x-sst-heavy 1327 151
"SST Light Italic" 1327 151
TharLon 1327 151
x-sst-light 1327 151
"Dinbol Regular" 1327 151
SamsungBengaliRegular 1327 151
"KN MohantyOTSmall Medium" 1327 151
hypure 1327 151
SamsungTamilRegular 1327 151
"Malayalam Sangam MN" 1327 151
"Noto Sans Kannada UI" 1327 151
helve-neue 1327 151
helve-neue 1327 151
"Noto Sans Kannada Bold" 1327 151
Sanpya 1327 151
SamsungPunjabiRegular 1327 151
samsung-sans-num4Lv 1327 151
LG_Kannada 1327 151
"Samsung Sans Regular" 1327 151
Zawgyi-One 1327 151
"Droid Serif Bold Italic" 1327 151
FZKATJW 1327 151
"courier new" 1095 129
SamsungEmojiRegular 1327 151
"MIUI EX Bold" 1327 151
"Android Emoji" 1327 151
"Noto Naskh Arabic UI" 1327 151
"LCD Com" 1327 151
"Futura Medium BT" 1327 151
Vivo-extract 1327 151
"Bangla Sangam MN Bold" 1327 151
hans-sans-regular 1327 151
SNum-3R 1327 151
SNum-3T 1327 151
hans-sans 1327 151
"SST Ultra Light" 1327 151
"Roboto Regular" 1327 151
"Roboto Light" 1327 151
Hanuman 1327 151
newlggothic 1327 151
DFHeiAW5-A 1327 151
hans-sans-light 1327 151
"Plate Gothic" 1327 151
SNum-3L 1327 151
SNum-3L 1327 151
"Myanmar Sangam Zawgyi Bold" 1327 151
lg-sans-serif-light 1327 151
"MIUI EX Light" 1327 151
"Roboto Thin" 1327 151
"SoMA Bold" 1327 151
Padauk 1327 151
"Samsung Sans" 1327 151
Spacious_SmallCap 1327 151
sans-serif 1327 151
"DV MohantyOT Medium" 1327 151
Stable_Slap 1327 151
monaco 1327 151
Flyme-Light 1327 151
fzzys-dospy 1327 151
ScreenSans 1327 151
clock2016 1327 151
"Roboto Condensed Bold Italic" 1327 151
Arial 1171 127
"KN Mohanty Medium" 1327 151
"MotoyaLMaru W3 mono" 1327 151
"Handset Condensed" 1327 151
"Roboto Italic" 1327 151
"HTC Hand" 1327 151
"SST Ultra Light Italic" 1327 151
"SST Vietnamese Roman" 1327 151
"Noto Naskh Arabic UI Bold" 1327 151
chnfzxh-medium 1327 151
SNumCond-3T 1327 151
century-gothic-regular 1327 151
default_roboto-light 1327 151
"Noto Sans Myanmar" 1327 151
"Myanmar Sangam MN" 1327 151
"Apple Color Emoji" 1327 151
weatherfontReg 1327 151
SamsungMalayalamRegular 1327 151
arial 1171 127
"Droid Serif Bold" 1327 151
"CPo3 PRC Bold" 1327 151
"MI LANTING" 1327 151
SamsungKorean-Regular 1327 151
"test45 Regular" 1327 151
spirit_time 1327 151
"Devanagari Sangam MN" 1327 151
ScreenSerif 1327 151
Roboto 1327 151
cursive-font-type 1327 151
STHeiti_vivo 1327 151
chnfzxh 1327 151
chnfzxh 1327 151
"Roboto Condensed Regular" 1327 151
samsung-neo-num3R 1327 151
"GJ MohantyOT Medium" 1327 151
"Chulho Neue Lock" 1327 151
roboto-num3L 1327 151
helve-neue-ultraLightextended 1327 151
SamsungOriyaRegular 1327 151
"SamsungSansNum-4Lv Light" 1327 151
MYingHei_18030_C2-Bold 1327 151
DFPShaoNvW5-GB 1327 151
"Roboto Black" 1327 151
helve-neue-ultralight 1327 151
gm_xihei 1327 151
"LGlock4 Light_0805" 1327 151
"Gujarati Sangam MN" 1327 151
"Malayalam Sangam MN Bold" 1327 151
roboto-num3R 1327 151
STXihei_vivo 1327 151
FZZhunYuan_GB18030 1327 151
noto-sans-cjk-light 1327 151
coloros 1327 151
"Noto Sans Gurmukhi" 1327 151
"Noto Sans Symbols" 1327 151
"Roboto Light Italic" 1327 151
"Lohit Tamil" 1327 151
cursive 912 114
default_roboto 1327 151
"BhashitaComplexSans Bold" 1327 151
"LG_Number_Roboto Thin" 1327 151
monospaced-without-serifs 1327 151
monospaced-without-serifs 1327 151
samsung-sans-num3LV 1327 151
DINPro 1327 151
Jomolhari 1327 151
sans-serif-light 1327 151
helve-neue-black 1327 151
"Lohit Bengali" 1327 151
"Myanmar Sangam Zawgyi" 1327 151
"Droid Serif Italic" 1327 151
"Roboto Bold Italic" 1327 151
NanumGothic 1327 151
"Sony Mobile UD Gothic Regular" 1327 151
"Georgia Bold Italic" 1327 151
samsung-sans-num3Lv 1327 151
yunos-thin 1327 151
samsung-neo-num3T-cond 1327 151
"Noto Sans Myanmar UI Bold" 1327 151
lgserif 1327 151
FZYouHei-R-GB18030 1327 151
"Lohit Punjabi" 1327 151
baskerville 1327 151
samsung-sans-num4Tv 1327 151
samsung-sans-thin 1327 151
"LG Emoji" 1327 151
AnjaliNewLipi 1327 151
"SamsungSansNum-4T Thin" 1327 151
SamsungKorean-Bold 1327 151
miuiex-light 1327 151
"Noto Sans Kannada" 1327 151
"Roboto Normal Italic" 1327 151
"Georgia Italic" 1327 151
sans-serif-medium 1327 151
"Smart Zawgyi" 1327 151
"Roboto Condensed Italic" 1327 151
"Noto Sans Kannada UI Bold" 1327 151
"DFP Sc Sans Heue30_103" 1327 151
"LG_Number_Roboto Bold" 1327 151
"Padauk Book" 1327 151
x-sst-condensed 1327 151
Sunshine-Uchen 1327 151
"Roboto Black Italic" 1327 151
"Ringo Color Emoji" 1327 151
"Devanagari OTS" 1327 151
"Smart Zawgyi Pro" 1327 151
FZLanTingHei-M-GBK 1327 151
"AndroidClock-Large Regular" 1327 151
proportionally-spaced-without-serifs 1327 151
"Cutive Mono" 1327 151
times 1134 126
"LG Smart_H test Bold" 1327 151
DINPro-Light 1327 151
sans-serif-black 1327 151
"Lohit Devanagari" 1327 151
proportionally-spaced-with-serifs 1327 151
samsung-sans-num3L 1327 151
"MYoung PRC Medium" 1327 151
DFGothicPW5-BIG5HK-SONY 1327 151
hans-sans-medium 1327 151
"SST Heavy" 1327 151
"SST Heavy" 1327 151
"MyanmarUNew Regular" 1327 151
"Noto Naskh Arabic Bold" 1327 151
SamsungGujarathiRegular 1327 151
fantasy 1123 139
helve-neue-light 1327 151
"Helvetica Neue OTS Bold" 1327 151
noto-sans-cjk-bold 1327 151
samsung-sans-num3R 1327 151
"Lindsey Samsung" 1327 151
samsung-sans-num3T 1327 151
ScreenSerifMono 1327 151
"ETrump Myanmar_ZW" 1327 151
helve-neue-thinextended 1327 151
"Noto Naskh Arabic" 1327 151
LG_Gujarati 1327 151
Smart_Monospaced 1327 151
"Tamil Sangam MN" 1327 151
"LG Emoji NonAME" 1327 151
"Roboto Condensed Light Italic" 1327 151
gm_jingkai 1327 151
FZLanTingKanHei_GB18030 1327 151
lgtravel 1327 151
palatino 1327 151
"Georgia Bold" 1327 151
"Droid Sans" 1327 151
LG_Punjabi 1327 151
"SmartGothic Bold" 1327 151
"Samsung Sans Thin" 1327 151
"SST Condensed Bold" 1327 151
Comics_Narrow 1327 151
courier 1095 129
"Oriya Sangam MN" 1327 151
helve-neue-lightextended 1327 151
FZLanTingHei-R-GB18030 1327 151
"AR CrystalheiHKSCS DB" 1327 151
serif 912 114
RTWSYueRoudGoG0v1-Regular 1327 151
MiaoWu_prev 1327 151
FZY1K 1327 151
"LG_Number_Roboto Regular" 1327 151
AndroidClock 1327 151
"SoMA Regular" 1327 151
"HYQiHei-40S Lightx" 1327 151
lg-sans-serif 1327 151
"Dancing Script Bold" 1327 151
"Dancing Script Bold" 1327 151
sec-roboto-light 1327 151
ColorOSUI-Regular 1327 151
"test Regular" 1327 151
"Tamil Sangam MN Bold" 1327 151
FZYingBiXingShu-S16 1327 151
"RobotoNum3L Light" 1327 151
monospaced-with-serifs 1327 151
samsung-sans-num35 1327 151
"Cool jazz" 1327 151
SamsungNeoNum-3L 1327 151
STXingkai 1327 151
ScreenSansMono 1327 151
DFPWaWaW5-GB 1327 151
"SamsungSansNum-3L Light" 1327 151
"Bangla Sangam MN" 1327 151
"Gurmukhi Sangam MN" 1327 151
SECRobotoLight 1327 151
hyfonxrain 1327 151
MYingHeiGB18030C-Bold 1327 151
samsung-sans-light 1327 151
samsung-sans-light 1327 151
"Droid Sans Fallback" 1327 151
"Roboto Test1 Bold" 1327 151
"Noto Sans Myanmar Bold" 1327 151
sans-serif-condensed-custom 1327 151
SamsungNeoNum-3T 1327 151
"Samsung Sans Num35" 1327 151
monospace 912 114
"TL Mohanty Medium" 1327 151
helve-neue-medium 1327 151
LTHYSZK 1327 151
"Roboto Condensed custome Bold" 1327 151
Myanmar3 1327 151
"Droid Sans Devanagari" 1327 151
ShaoNv_prev 1327 151
samsung-neo-num3L 1327 151
FZLanTingHei-EL-GBK 1327 151
yunos 1327 151
samsung-neo-num3T 1327 151
"Times New Roman" 1134 126
helve-neue-bold 1327 151
noto-sans-cjk-regular 1327 151
"Noto Sans Gurmukhi UI Bold" 1327 151
DINPro-black 1327 151
FZLanTingHei-EL-GB18030 1327 151
"SST Vietnamese Medium" 1327 151
"Roboto Condensed Light" 1327 151
"SST Vietnamese Bold" 1327 151
"AR DJ-KK" 1327 151
"Droid Sans SEMC" 1327 151
"Noto Sans Myanmar UI" 1327 151
"Coming Soon" 1327 151
"MYuppy PRC Medium" 1327 151
Rosemary 1327 151
"Lohit Gujarati" 1327 151
"Roboto Condensed custom Bold" 1327 151
FZLanTingHeiS-R-GB 1327 151
"Helvetica Neue OTS" 1327 151
Kaiti_prev 1327 151
Roboto-BigClock 1327 151
FZYBKSJW 1327 151
"Handset Condensed Bold" 1327 151
SamsungGeorgian 1327 151
"Dancing Script" 1327 151
sans-serif-condensed 1327 151
hans-sans-thin 1327 151
"SamsungSansNum-4Tv Thin" 1327 151
"Lohit Odia" 1327 151
BhashitaComplexSans 1327 151
//最后生成的可识别列表
0: "Verdana"
1: "Helvetica Neue LT Pro 35 Thin"
2: "tahoma"
3: "verdana"
4: "times new roman"
5: "Courier New"
6: "Microsoft Himalaya"
7: "helvetica"
8: "LG-FZKaTong-M19-V2.2"
9: "Georgia"
10: "georgia"
11: "courier new"
12: "Arial"
13: "arial"
14: "cursive"
15: "times"
16: "fantasy"
17: "courier"
18: "serif"
19: "monospace"
20: "Times New Roman"

View File

@ -17,7 +17,7 @@
} }
} }
log += "\r\n" log += "\r\n"
bofs.appendFileSync(`D:/My_Dir/env_xbb_lastest_cheerio/run/log.txt`, log) bofs.appendFileSync(`./env_xbb_lastest_cheerio/run/log.txt`, log)
} }
//hook console,让他自动调用printlog //hook console,让他自动调用printlog
console.log_ = console.log; console.log_ = console.log;

View File

@ -1,204 +0,0 @@
bodavm.toolsFunc.HTMLParser = function HTMLParser(data) {
let data_=data
data=data.replace(/<!-[\s\S]*?-->/g,'').replace(/\/\/[\s\S]*?\n/g,'')
// debugger
let tempdata;
if(data.length <1){
tempdata=data_
}
// debugger
// 最外层模拟的节点
const nodeType = {
TEXT: 'text',
ELEMENT: 'element',
};
// 最外层增加一个模拟的根节点标签
const frameflag = 'rootnode';
// 计算一个完整标签的范围eg. [0, 50]
const createRange = (startPos, endPos) => {
// 因为最外层模拟了 <rootnode>,所以需要将这部分长度减掉
const frameFlagOffset = frameflag.length + 2;
return [startPos - frameFlagOffset, endPos - frameFlagOffset]
};
const root = {
_tagName: '#document',
_children: [],
_idelements: {},
_className: {},
_tagelements: {},
_innerHtml:[]
};
// 设置 root 为父节点
let currentParent = root;
// 栈管理
const stack = [root];
let lastTextPos = -1;
// 找到数组的最后一项
function arrBack(arr) {
return arr[arr.length - 1];
}
// ...开始遍历 /解析
// 将模拟的根节点和需要解析的 html 拼接
data = `<${frameflag}>${data}</${frameflag}>`;
const kMarkupPattern = /<(\/?)([a-zA-Z][-.:0-9_a-zA-Z]*)((?:\s+[^>]*?(?:(?:'[^']*')|(?:"[^"]*"))?)*)\s*(\/?)>/g;
while ((match = kMarkupPattern.exec(data))) {
/**
* matchText: 匹配的字符 eg. <span id="xxx">
* leadingSlash: 是否为闭合标签 eg. /
* tagName: 标签名 eg. span
* attributes: 属性 eg. id="xxx"
* closingSlash: 是否为自闭合 eg. /
*/
let { 0: matchText, 1: leadingSlash, 2: tagName, 3: attributes, 4: closingSlash } = match;
// 本次匹配到的字符串
const matchLength = matchText.length;
// 本次匹配的起始位置
const tagStartPos = kMarkupPattern.lastIndex - matchLength;
// 本次匹配的末尾位置
const tagEndPos = kMarkupPattern.lastIndex;
if (lastTextPos > -1) {
// 处理文本eg. hello world
// 上次匹配的末尾位置 + 本次匹配的字符长度 小于 本次匹配的末尾位置就说明中间有 text这个稍微想下其实还是比较好理解的
// 如果没有 textlastTextPos + matchLength 都会等于 tagEndPos
// 上次匹配的末尾位置到本次匹配的起始位置
const text = data.substring(lastTextPos, tagStartPos);
// if (text.indexOf('<!') == -1 || text.indexOf('->') == -1) {
//过滤innerHTML中的特殊字符
let text_filter = text.replace(/\n/g, '').replace(/\t/g, '')
if (text_filter.length > 0) {
currentParent._innerHtml.push({
type: nodeType.TEXT,
range: createRange(lastTextPos, tagStartPos),
value: text_filter,
});
}
// }
}else if(tempdata){
currentParent._innerHtml.push({
type: nodeType.TEXT,
range: [0,0],
value: tempdata,
});
tempdata=undefined
}
// 记录上次匹配的位置
lastTextPos = kMarkupPattern.lastIndex;
// 如果匹配到的标签是模拟标签,就跳过
if (tagName === frameflag) continue;
// ...处理 nodeType 为 element 逻辑
if (!leadingSlash) {
const attrs = {};
// 解析 id、class 属性,并且挂到 attrs 对象下
const kAttributePattern = /(?:^|\s)(id|type|href|value|class|style|src|content|target|onClick|r|rel|name|http-equiv|charset)\s*=\s*((?:'[^']*')|(?:"[^"]*")|\S+)/gi;
for (let attMatch; (attMatch = kAttributePattern.exec(attributes));) {
const { 1: key, 2: val } = attMatch;
// 属性值是否带引号
const isQuoted = val[0] === `'` || val[0] === `"`;
attrs[key.toLowerCase()] = isQuoted ? val.slice(1, val.length - 1) : val;
}
// debugger
const currentNode = {
_tagName: tagName,
_attrs: attrs,
_rawAttrs: attributes.slice(1),
_type: nodeType.ELEMENT,
// 这里的 range 不一定是正确的 range需要匹配到闭标签以后更新
_range: createRange(tagStartPos, tagEndPos),
_children: [],
_parentNode: currentParent,
_innerHtml:[]
};
// if(currentNode._tagName=='script'){debugger}
// console.log('标签',currentNode._tagName)
currentNode.__proto__ = bodavm.toolsFunc.setProto(currentNode._tagName)
// debugger
// currentNode
if (attrs['id']) {
root._idelements[attrs['id']] = currentNode
}
if (attrs['class']) {
if (root['_className'][attrs['class']] == undefined) {
root['_className'][attrs['class']] = []
}
// debugger
root._className[attrs['class']].push(currentNode)
}
let root_tagelement = root._tagelements[tagName]
if (root_tagelement) {
root._tagelements[tagName].push(currentNode)
} else {
root._tagelements[tagName] = []
root._tagelements[tagName].push(currentNode)
}
// if (currentNode.tagName=='head'){debugger}
// 将当前节点信息放入到 currentParent 的 children 中
currentParent._children.push(currentNode);
// 重置 currentParent 节点为当前节点
currentParent = currentNode;
// 将每个节点依次塞到栈中,然后在后面的闭标签中以栈的方式释放
stack.push(currentParent);
// debugger
}
// 自闭合元素
const kSelfClosingElements = {
// area: true,
// img: true,
// meta:true,
// frame:true,
// embed:true,
// keygen:true,
// source:true,
// base:true,
// hr:true,
// br:true,
input:true,
// link:true, area: true,
img: true,
meta: true,
link: true,
area: true,
br:true,
// '!DOCTYPE':true,
// '!--':true
// ...省略了部分标签
};
if (leadingSlash || closingSlash || kSelfClosingElements[tagName]) {
// 开闭标签名是否匹配,比如有可能写成 <div></div1>,这种就需要异常处理
if (currentParent._tagName === tagName) {
// debugger
// 更新 range之前处理开标签算出的 range 是不包含闭标签的
currentParent._range[1] = createRange(-1, Math.max(lastTextPos, tagEndPos))[1];
// 将处理完的开闭标签踢出
stack.pop();
// 将 stack 的最后一个节点赋值给 currentParent
currentParent = arrBack(stack);
} else {
// <div></div1>,异常直接从栈中踢出,不更新 range
stack.pop();
currentParent = arrBack(stack);
}
}
}
// 通过处理,将 stack 返回就是最终的结果
// debugger
return stack;
}

View File

@ -1,16 +0,0 @@
{
"targets":[
{
"target_name":"boda",
"sources":['./c++_src/main.cc'],
"include_dirs":['<!@(node -p "require(\'node-addon-api\').include")'],
"dependencies":['<!(node -p "require(\'node-addon-api\').gyp")'],
"cflags_cc":[
"-std-c++17"
],
"cflags!":["-fno-exceptions"],
"cflags_cc!":['-fno-exceptions'],
"defines":['NAPI_DISABLE_CPP_EXCEPTIONS']
}
]
}

View File

@ -1,37 +0,0 @@
/*
1.最新版npm
windows 管理员运行 npm install --global windows-build-tools,
如果卡在Successfully install Python2.7,就在c:\用户名\AppDate\Local\TEMP下新建
一个文件,名称dd_client_.log 内容 Closing installer. Return code: 3010.
3.npm install --global node-gyp
4.当前目录下放入bingding.gyp
5.初始化项目
1.npm init
2.npm i node-addon-api
3.安装vscode c++拓展
4.执行node-gyp configure 查看Dnode_root_dir,确认头文件 '-Dnode_root_dir=C:\\Users\\徐晓波\\AppData\\Local\\node-gyp\\Cache\\14.18.2',
5.c_cpp_properties.json(vscode ctrl+shift+p ) includePath 中加入 C:\Users\徐晓波\AppData\Local\node-gyp\Cache\14.18.2\include\node
6.编译
1.根目录放入bingding.gyp
2.cmd执行node-gyp rebuild 编译
3.报错
File "C:\Users\徐晓波\AppData\Roaming\npm\node_modules\node-gyp\gyp\pylib\gyp\input.py", line 983, in ExpandVariables
replacement = result.stdout.decode("utf-8").rstrip()
AttributeError: 'str' object has no attribute 'decode' while trying to load binding.gyp
解决办法,进入C:\Users\徐晓波\AppData\Roaming\npm\node_modules\node-gyp\gyp\pylib\gyp\input.py", line 983
修改该行代码为replacement = result.stdout.rstrip()
7.安装npm install bindings
*/

View File

@ -1,123 +0,0 @@
# -*- coding = utf-8 -*-
# @Time: 2023-02-03 22:59
# @Author: xiaobo 徐晓波
# @Site:
# @File: test.py
# @Software: PyCharm
bbb=[
'EventTarget',
'WindowProperties',
'Window',
'Node',
'Element',
'HTMLElement',
'HTMLCollection',
'NetworkInformation',
'CustomElementRegistry',
'Event',
'UIEvent',
'MouseEvent',
'Document',
'HTMLDocument',
'Location',
'Storage',
'CharacterData',
'Text',
'Database',
'CloseEvent',
'Notification',
'IDBDatabase',
'IDBRequest',
'IDBOpenDBRequest',
'IDBFactory',
'History',
'Screen',
'CSSStyleDeclaration',
'CanvasRenderingContext2D',
'WebGLRenderingContext',
'MediaQueryList',
'CSSRuleList',
'Attr',
'Navigation',
'MediaStream',
'TrustedTypePolicyFactory',
'Scheduler',
'CookieStore',
'CacheStorage',
'OffscreenCanvasRenderingContext2D',
'VisualViewport',
'BeforeInstallPromptEvent',
'BarProp',
'BaseAudioContext',
'BluetoothUUID',
'StyleMedia',
'Audio',
'Crypto',
'CDATASection',
'Comment',
'DocumentFragment',
'DocumentType',
'DOMParser',
'External',
'WebSocket',
'SourceBuffer',
'DOMStringList',
'Headers',
'IDBObjectStore',
'IDBTransaction',
'IDBVersionChangeEvent',
'TextTrackList',
'SpeechSynthesisUtterance',
'MediaEncryptedEvent',
'MutationObserver',
'NamedNodeMap',
'NodeList',
'OfflineAudioContext',
'Path2D',
'Performance',
'ScreenOrientation',
'PerformanceEntry',
'PerformancePaintTiming',
'Permissions',
'PermissionStatus',
'Request',
'SVGElement',
'SVGGraphicsElement',
'SVGPatternElement',
'SVGGeometryElement',
'SVGPathElement',
'SVGSVGElement',
'SVGSymbolElement',
'SVGUseElement',
'WebGLShader',
'WebGLShaderPrecisionFormat',
'RTCPeerConnection',
'WebGLBuffer',
'WebGLProgram',
'CSS',
'Navigator',
'BatteryManager',
'Plugin',
'PluginArray',
'MimeType',
'MimeTypeArray',
'XMLHttpRequestEventTarget',
'XMLHttpRequest',
'globalThis'
]
import os
lists=os.listdir(r'D:\My_Dir\环境框架_xbb_lastest\env')
for i in lists:
name=i.split('.')[0]
if name not in bbb:
print(name)

View File

@ -1,81 +0,0 @@
/**
*
* 安装: nodejs
* 然后: npm install vm2 npm install canvas npm install jsdom
* 提示: 建议每一个编写完事的js 建议用fd的js调试工具压缩一下减少占用行数
*
* 使用vm2之前先修改vm2本地文件
*
* 1、修改vm.js里的
* // Create a new context for this vm.
* //原本下面这句话 const _context = createContext(undefined, {
* //被修改成了这句话 const _context = createContext(options, {
* //外界在new VM的时候 把全局变量通过对象形式传递过来全局的context就会继承这个全局变量
*
*
* 2、修改contextify.js里的 搜索Contextify.setGlobal =
* (1)、try {
global[prop] = value;//Contextify.value(value); //这里是为了在调试代码里不显示proxy 已被代理
* (2)、去掉vm2特征global
* //下面这段屏蔽了
* Object.defineProperties(global, {
* global: {value: global},
* GLOBAL: {value: global},
* root: {value: global},
* isVM: {value: true}
* });
*
*
* 3、修改main.js里的
* //如果想让vm2报错不是内部错误修改890行
* throw e;//this._internal.Decontextify.value(e); //原本是这句话throw this._internal.Decontextify.value(e); 改成了 throw e
*
* 关于vm2报错本地文件但是找不到那个报错的调试文件解决方法
* const {VM,VMScript} = require("vm2");//这个是修改过的
* const CodeGenerate = require("./node_tools/CodeGenerate.js");
* //内存的概念,并非真正的内存,只是变量存储。
* let Vm2Cfg = {memory:{prototypes:{},examples:{}},DefPrototype(prototypeName,constructor,basePrototype){}};
* let savepath = `${__dirname}/vm_testScript/VM2_debug.js`; //提前把文件路径保存到变量里。
* let code = CodeGenerate(path_,savepath); //把加载完事的文件code直接写到本地
* let vm = new VM();
* let catvm = Object.assign(Vm2Cfg,{vm:this});//内存配置导入
* vm.setGlobal("catvm",catvm);//导入到全局里,这里的名字随便改,整体形成代码形式的话。就不要随意修改了。
* vm.run(new VMScript(code,savepath)); //运行前 savepath 要保存到本地,那么调试报错时才能找到位置。
*
*
* VScode 环境联调配置nodejs执行配置文件内容 launch.json
* //运行js时添加nodejs配置文件 launch.json ,测试代码路径如下:
* //C:\Users\AdministratorLr\Desktop\NewCode3_2022_10_15\.vscode\launch.json
* //配置文件内容入下:
*
*{
* "version": "0.2.0",
* "configurations": [
* {
* "name": "v1 本地调试",
* "type": "node",
* "request": "launch",
* "program": "${workspaceFolder}/index.js", //它只是跟在可执行文件后面的 一个参数了要调试的js代码不管你想执行哪个配置文件这里配置即可
* "runtimeExecutable": "D:\\nodejs\\node.exe" // 这里是 v16 版本的node路径不管你安装几个版本的node都可以指定全局配置。这里配置完就可以随意切换了
* },
* {
* "name": "v2 浏览器无环境联调",
* "type": "node",
* "request": "launch",
* "program": "--inspect-brk", //它只是跟在可执行文件后面的 一个参数了
* "args": ["${workspaceFolder}/index.js"],//它只是跟在可执行文件后面的 一个参数了
* "runtimeExecutable": "D:\\nodejs\\node.exe" // 这里是 v16 版本的node路径不管你安装几个版本的node都可以指定全局配置。这里配置完就可以随意切换了
* },
* {
* "name": "v3 cmd参数详解", //演示所有参数的含义 , 控制台执行的结果是: D:\nodejs\node.exe args1 args2 args3 args4 args5 所以根据想要的功能自行设定和删减
* "type": "node",
* "request": "launch",
* "program": "args3", //它只是跟在可执行文件后面的 一个参数了
* "args": ["args4", "args5"],//它只是跟在可执行文件后面的 一个参数了
* "runtimeArgs": ["args1", "args2"],//它只是跟在可执行文件后面的 一个参数了
* "runtimeExecutable": "D:\\nodejs\\node.exe" // 这里是 v16 版本的node路径不管你安装几个版本的node都可以指定全局配置。这里配置完就可以随意切换了
* }
* ]
*}
*
**/

View File

@ -1,146 +0,0 @@
//全局对象配置
var myloglist=[]
var myloglistindex=0
bodavm = {
"toolsFunc": {}, //功能函数相关,插件
"envFunc": {},//环境相关
"config": {}, //配置相关
"memory":{},
"toolsPlugin": {} //Plugin相关
}
bodavm.config.isdebug=false; //是否开启debugger
bodavm.config.proxy = false; //是否代理
bodavm.config.printLog=true; //是否打开日志
bodavm.memory.isproxy= {}
bodavm.memory.filterProxyProp=['toJSON','undefined','splice','String','fromCharCode','apply','prototype','__proto__','toString','Object','Array',"eval",'Symbol(Symbol.toStringTag)','Symbol.toStringTag','bodavm.memory.symbolData',"Symbol(Symbol.species)",'Symbol(Symbol.hasInstance)'] //需要过滤 的属性
bodavm.memory.symbolData=Symbol("data") //用来保存当前对象上的原型属性
bodavm.memory.globalInit={}
//存储tag标签
bodavm.memory.tag=[]
// bodavm.memory.localStorage={};
bodavm.memory.cookie1='' //用来存储555
bodavm.memory.cookie2={} //用来存储"a=10"
bodavm.memory.cookie=''; //拼接cookie1 和cookie2
bodavm.memory.asyncEvent={};
bodavm.memory.globalInit.timeoutID=0;
// "Verdana;Helvetica Neue LT Pro 35 Thin;tahoma;verdana;times new roman;Courier New;Microsoft Himalaya;helvetica;LG-FZKaTong-M19-V2.2;Georgia;georgia;courier new;Arial;arial;cursive;times;fantasy;courier;serif;monospace;Times New Roman"
bodavm.memory.globalInit.fontList = ["SimHei", "SimSun", "NSimSun", "FangSong", "KaiTi",'Verdana','tahoma','helvetica','Georgia','georgia','Arial','arial','cursive','fantasy','courier','serif','monospace'];
bodavm.memory.font={
"font-family":'',
"fontFamily":''
}
bodavm.memory.location={
origin:"http://101.43.230.100",
hash:"",
pathname:"/",
search:"",
href:"http://101.43.230.100/",
port:"",
protocol:"http:",
host:"101.43.230.100",
ancestorOrigins:"{}",
hostname:"101.43.230.100"
};
bodavm.memory.document={
URL:"http://101.43.230.100/",
referrer:"",
documentURI:"http://101.43.230.100/",
compatMode:"CSS1Compat",
dir:"",
title:"QQ会员等级 - QQ等级 - 好莱坞等级 查询",
designMode:"off",
readyState:"complete",
contentType:"text/html",
inputEncoding:"UTF-8",
domain:"101.43.230.100",
characterSet:"UTF-8",
charset:"UTF-8",
hidden:"false",
onmousemove:"null",
onselectionchange:"null",
};
bodavm.memory.htmldivelement={
align:"undefined",
};
bodavm.memory.history={
scrollRestoration:"auto"
};
bodavm.memory.screen={
width:1440,
height:960,
availWidth:1440,
availHeight:920,
pixelDepth:24,
colorDepth:24,
availLeft:0,
availTop:0,
isExtended:undefined,
orientation:{},
onchange:undefined,
};
bodavm.memory.navigator={
language:"zh-CN",
userAgent:"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36",
appVersion:"5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36",
vendor:"Google Inc.",
appName:"Netscape",
appCodeName:"Mozilla",
cookieEnabled:true,
languages:["zh-CN","zh"],
productSub:"20030107",
userAgentData:undefined,
xr:undefined,
platform:'Win32',
webkitPersistentStorage:{},
connection:{},
javaEnabled:false
};
bodavm.memory.window={
indexedDB:{},
name:"",
};
bodavm.memory.canvas={};
bodavm.memory.canvas2D={
direction: "ltr",
fillStyle: "#000000",
filter: "none",
font: "10px sans-serif",
fontKerning: "auto",
fontStretch: "normal",
fontVariantCaps: "normal",
globalAlpha: 1,
globalCompositeOperation: "source-over",
imageSmoothingEnabled: true,
imageSmoothingQuality: "low",
letterSpacing: "0px",
lineCap: "butt",
lineDashOffset: 0,
lineJoin: "miter",
lineWidth: 1,
miterLimit: 10,
shadowBlur: 0,
shadowColor: "rgba(0, 0, 0, 0)",
shadowOffsetX: 0,
shadowOffsetY: 0,
strokeStyle: "#000000",
textAlign: "start",
textBaseline: "alphabetic",
textRendering: "auto",
wordSpacing: "0px",
}
// bodavm.memory.localStorage={}

File diff suppressed because one or more lines are too long

View File

@ -1,230 +0,0 @@
// 代理器失效 1.没有使用代理对象 2.代理器脱钩 目标代码通过 this 绕过代理器
// 解决办法
window = this;
window = new Proxy(window, this)
// globalThis=new Proxy(globalThis,'globalThis')
// window.mythis=function(){
/// 网站扣下的代码
// }
// mythis()
//2自执行
for (let name in global) {
switch (name) {
case "window":
continue;
case "global":
continue;
}
window[name] = global[name];
delete global[name];
}
window = myProxy(window, "window");
Object.setPrototypeOf(global, window);
!function () { }()
//全局hook
bobomyHookfilter={
'location':true,
'Function':true,
'Object':true,
'window':true,
'Window':true,
'document':true,
'bobomyHook':true,
"hookObjs":true,
'objlist':true,
'JSON':true,
'bobomyHookfilter':true,
'Math':true,
'Intl':true,
'Reflect':true,
'console':true,
'CSS':true,
'Atomics':true,
'top':true,
}
hookObjs = {
}
objlist=[
{
'name':"window",
'obj':window
},
{
'name':"document",
'obj':document
},
{
'name':"screen",
'obj':screen
},
{
'name':"history",
'obj':history
},
{
'name':"localStorage",
'obj':localStorage
},
{
'name':'navigation',
'obj':navigation
},
{
'name':'webkitStorageInfo',
'obj':webkitStorageInfo
},
{
'name':'speechSynthesis',
'obj':speechSynthesis
},
{
'name':'sessionStorage',
'obj':sessionStorage
},
{
'name':'customElements',
'obj':customElements
},
{
'name':'clientInformation',
'obj':clientInformation
},
{
'name':'menubar',
'obj':menubar
},
{
'name':'toolbar',
'obj':toolbar
},
{
'name':'visualViewport',
'obj':visualViewport
},
{
'name':'styleMedia',
'obj':styleMedia
},
{
'name':'scheduler',
'obj':scheduler
},
{
'name':'indexedDB',
'obj':indexedDB
},
{
'name':'trustedTypes',
'obj':trustedTypes
},
{
'name':'cookieStore',
'obj':cookieStore
},
{
'name':'external',
'obj':external
}
]
for (let i = 0; i < objlist.length; i++) {
let name = objlist[i]['name'];
let obj= objlist[i]['obj']
hookObjs[name] = {}
bobomyHook(obj,name)
}
function bobomyHook(obj,name) {
let boboobjname = Object.getOwnPropertyNames(obj)
for (let i =0; i<boboobjname.length;i++) {
//i name
if (bobomyHookfilter[boboobjname[i]]){continue}
let bobodesc = Object.getOwnPropertyDescriptor(obj, boboobjname[i])
// console.log(bobodesc)
let boboconfigurable_ = bobodesc['configurable']
let boboenumerable_ = bobodesc['enumerable']
let bobovalue_ = bobodesc['value']
let bobowritable_ = bobodesc['writable']
let boboget_ = bobodesc['get']
let boboset_ = bobodesc['set']
// console.log(bobodesc)
// get set 与value writable不能共存 configurable enumerable这两个是肯定有的
try{
if (boboget_ || boboset_) {
hookObjs[name][boboobjname[i] + '_get'] = boboget_
hookObjs[name][boboobjname[i] + '_set'] = boboset_
const myvalue=boboobjname[i]
Object.defineProperty(obj,myvalue,{
configurable:boboconfigurable_,
enumerable:boboenumerable_,
get:boboget_?function (){
let args=arguments
let result=hookObjs[name][myvalue + '_get'].apply(this,arguments)
console.log(`${name} get-> ${myvalue} arg->${JSON.stringify(args)} -> result -> ${result}`)
return result
}:undefined,
set:boboset_?function(){
let args=arguments
let result=hookObjs[name][myvalue + '_set'].apply(this,arguments)
console.log(`${name} set-> ${myvalue} -> arg->${JSON.stringify(args)} value -> ${result}`)
return result
}:undefined
})
} else {
hookObjs[name][boboobjname[i] + '_value']=bobovalue_
if (typeof bobovalue_ =='object'){
const myvalue=boboobjname[i]
console.log(`${name} value-> ${myvalue} result ->${bobovalue_}`);
Object.defineProperty(obj,boboobjname[i],{
configurable:boboconfigurable_,
enumerable:boboenumerable_,
writable:bobowritable_,
value:bobovalue_
})
}else if (typeof bobovalue_ =='function'){
const myvalue=boboobjname[i]
Object.defineProperty(obj,boboobjname[i],{
configurable:boboconfigurable_,
enumerable:boboenumerable_,
writable:bobowritable_,
value:function (){
let args=arguments
let result=hookObjs[name][myvalue + '_value'].apply(this,arguments)
console.log(`${name} value apply -> ${myvalue} arg->${JSON.stringify(args)} result ->${result}`);
return result
}
})
}
}
}catch{}
}
if (obj.__proto__ !=null){
bobomyHook(obj.__proto__,name)
}
}
// window.atob('123')

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,46 +0,0 @@
(function n(i, r, t, e, l, a, f, u) {
var c, o, h, s, p, g, m, y, d, v, w, b, C, F, j, S, k, q, x, z, A, B, D, E, G, H, I, J, K, L, M, N, O, P, Q, R, T,
U, V;
if (this.constructor != n) {
if (e || ((e = [this]).n = e[0], e.t = [], (o = {}).s = !1, o.v = !1, e.t.push(o), n.r = n.g = n), h = e[e.length - 1], -3 == t || -2 == t) {
if (-2 == t) {
for (a = 0, f = 0; i[r] > 127;) f += i[r++] - 128 << 7 * a++;
f += i[r++] << 7 * a
} else f = (r = (s = n(i, r, -2)).i) + (a = s.n) - 1, r += a;
return {n: f, i: r}
}
if (l === n) {
for (p = new n.g, g = [].slice.call(u), m = 0; m < a.length; m++) p[a[m]] = g[m];
return p.arguments = u, (y = [].concat(e).concat(p)).n = f, y.t = [], n(i, r, t, y)
}
if (d = r || 0, c = t || i.length, v = i[d++], s = n(i, d, -2), d = s.i, s.n, w = 0, 6 == v || 10 == v ? w = 1 : 30 == v ? w = 2 : 29 == v && (w = 3), 6 == v || 10 == v || 30 == v || 29 == v) {
for (o = e.t && e.t[e.t.length - 1], b = []; d < c;) {
if (C = d++, s = n(i, d, -3), d = s.i, F = s.n, b.push(n(i, C, F, e)), 3 != w && e.a) return b[b.length - 1];
if (2 == w && o && (o.v || o.s)) return b[b.length - 1]
}
if (2 != w) return b
}
if (25 == v) {
if (j = n(i, d++, (s = n(i, d, -3), d = s.i, s.n), e), g = n(i, d++, (s = n(i, d, -3), d = s.i, s.n), e), n.bind) return new (n.bind.apply(j, [null].concat(g)));
for (S = [], m = 0; m < g.length; m++) S[m] = "a[" + m + "]";
return n.constructor("F,a", "return new F(" + S.join(",") + ")")(j, g)
}
if (80 != v) {
if (125 == v) throw n(i, d++, (s = n(i, d, -3), d = s.i, s.n), e);
if (18 == v || 113 == v) {
for (I = i[d++], s = n(i, d, -2), d = s.i, J = s.n, K = [], m = 0; m < J; m++) s = n(i, d, -2), d = s.i, L = s.n, K.push(L);
return M = String.fromCharCode.apply(null, K), 113 == v || e.m ? M : l ? [e[I], M] : e[I][M]
}
return 0 == v ? (e.m = !0, N = n(i, d++, (s = n(i, d, -3), d = s.i, s.n), e), e.m = !1, h[N] = e.u, n(i, d++, (s = n(i, d, -3), d = s.i, s.n), e)) : 67 == v ? (91 == i[d++] && (O = i[d++]), O) : 34 == v ? a != f : 89 == v ? n(i, d++, (s = n(i, d, -3), d = s.i, s.n), e) : 58 == v ? null : 57 == v ? n(i, d++, (s = n(i, d, -3), d = s.i, s.n), e, 0, n(i, d++, (s = n(i, d, -3), d = s.i, s.n), e), n(i, d++, (s = n(i, d, -3), d = s.i, s.n), e)) : 78 == v ? (P = n(i, d++, (s = n(i, d, -3), d = s.i, s.n), e), Q = n(i, d++, (s = n(i, d, -3), d = s.i, s.n), e), e.m = !P, R = n(i, d++, (s = n(i, d, -3), d = s.i, s.n), e), e.m = !1, l ? [Q, R] : Q[R]) : 88 == v ? n(i, d++, (s = n(i, d, -3), d = s.i, s.n), e) ? n(i, d++, (s = n(i, d, -3), d = s.i, s.n), e) : (s = n(i, ++d, -3), d = s.i, s.n, n(i, d++, (s = n(i, d, -3), d = s.i, s.n), e)) : 95 == v ? (T = n(i, d++, (s = n(i, d, -3), d = s.i, s.n), e, !0), U = n(i, d++, (s = n(i, d, -3), d = s.i, s.n), e), T instanceof n.constructor ? n.apply.call(T, e[0].n, U) : (V = T[0][T[1]], T[0] instanceof n.g ? n.apply.call(V, e.n, U) : n.apply.call(V, T[0], U))) : void 0
}
k = d++, s = n(i, d, -3), d = s.i, q = s.n, x = d++, s = n(i, d, -3), d = s.i, z = s.n, A = d++, s = n(i, d, -3), d = s.i, B = s.n;
try {
if (D = n(i, k, q, e), e.a) return D
} catch (W) {
if (e.u = W, E = n(i, x, z, e), e.a) return E
} finally {
if (G = e.a, e.a = !1, H = n(i, A, B, e), e.a) return H;
e.a = G
}
}
})([6, 198, 8, 10, 195, 8, 80, 192, 8, 30, 252, 7, 30, 249, 7, 88, 154, 1, 57, 127, 34, 0, 78, 111, 67, 2, 91, 0, 78, 97, 67, 2, 91, 0, 95, 84, 78, 42, 67, 2, 91, 0, 18, 8, 0, 6, 79, 98, 106, 101, 99, 116, 18, 26, 0, 24, 103, 101, 116, 79, 119, 110, 80, 114, 111, 112, 101, 114, 116, 121, 68, 101, 115, 99, 114, 105, 112, 116, 111, 114, 29, 38, 78, 28, 67, 2, 91, 0, 18, 10, 0, 8, 100, 111, 99, 117, 109, 101, 110, 116, 18, 10, 0, 8, 108, 111, 99, 97, 116, 105, 111, 110, 113, 6, 0, 4, 104, 114, 101, 102, 18, 5, 0, 3, 103, 101, 116, 18, 6, 0, 4, 110, 97, 109, 101, 113, 10, 0, 8, 103, 101, 116, 32, 104, 114, 101, 102, 30, 21, 30, 19, 125, 17, 25, 15, 18, 7, 0, 5, 69, 114, 114, 111, 114, 29, 4, 113, 2, 0, 0, 58, 0, 88, 154, 1, 57, 127, 34, 0, 78, 111, 67, 2, 91, 0, 78, 97, 67, 2, 91, 0, 95, 84, 78, 42, 67, 2, 91, 0, 18, 8, 0, 6, 79, 98, 106, 101, 99, 116, 18, 26, 0, 24, 103, 101, 116, 79, 119, 110, 80, 114, 111, 112, 101, 114, 116, 121, 68, 101, 115, 99, 114, 105, 112, 116, 111, 114, 29, 38, 78, 28, 67, 2, 91, 0, 18, 10, 0, 8, 100, 111, 99, 117, 109, 101, 110, 116, 18, 10, 0, 8, 108, 111, 99, 97, 116, 105, 111, 110, 113, 6, 0, 4, 104, 97, 115, 104, 18, 5, 0, 3, 103, 101, 116, 18, 6, 0, 4, 110, 97, 109, 101, 113, 10, 0, 8, 103, 101, 116, 32, 104, 97, 115, 104, 30, 21, 30, 19, 125, 17, 25, 15, 18, 7, 0, 5, 69, 114, 114, 111, 114, 29, 4, 113, 2, 0, 0, 58, 0, 88, 154, 1, 57, 127, 34, 0, 78, 111, 67, 2, 91, 0, 78, 97, 67, 2, 91, 0, 95, 84, 78, 42, 67, 2, 91, 0, 18, 8, 0, 6, 79, 98, 106, 101, 99, 116, 18, 26, 0, 24, 103, 101, 116, 79, 119, 110, 80, 114, 111, 112, 101, 114, 116, 121, 68, 101, 115, 99, 114, 105, 112, 116, 111, 114, 29, 38, 78, 28, 67, 2, 91, 0, 18, 10, 0, 8, 100, 111, 99, 117, 109, 101, 110, 116, 18, 10, 0, 8, 108, 111, 99, 97, 116, 105, 111, 110, 113, 6, 0, 4, 104, 111, 115, 116, 18, 5, 0, 3, 103, 101, 116, 18, 6, 0, 4, 110, 97, 109, 101, 113, 10, 0, 8, 103, 101, 116, 32, 104, 111, 115, 116, 30, 21, 30, 19, 125, 17, 25, 15, 18, 7, 0, 5, 69, 114, 114, 111, 114, 29, 4, 113, 2, 0, 0, 58, 0, 88, 163, 1, 57, 135, 1, 34, 0, 78, 115, 67, 2, 91, 0, 78, 101, 67, 2, 91, 0, 95, 88, 78, 42, 67, 2, 91, 0, 18, 8, 0, 6, 79, 98, 106, 101, 99, 116, 18, 26, 0, 24, 103, 101, 116, 79, 119, 110, 80, 114, 111, 112, 101, 114, 116, 121, 68, 101, 115, 99, 114, 105, 112, 116, 111, 114, 29, 42, 78, 28, 67, 2, 91, 0, 18, 10, 0, 8, 100, 111, 99, 117, 109, 101, 110, 116, 18, 10, 0, 8, 108, 111, 99, 97, 116, 105, 111, 110, 113, 10, 0, 8, 112, 114, 111, 116, 111, 99, 111, 108, 18, 5, 0, 3, 103, 101, 116, 18, 6, 0, 4, 110, 97, 109, 101, 113, 14, 0, 12, 103, 101, 116, 32, 112, 114, 111, 116, 111, 99, 111, 108, 30, 21, 30, 19, 125, 17, 25, 15, 18, 7, 0, 5, 69, 114, 114, 111, 114, 29, 4, 113, 2, 0, 0, 58, 0, 88, 159, 1, 57, 131, 1, 34, 0, 78, 113, 67, 2, 91, 0, 78, 99, 67, 2, 91, 0, 95, 86, 78, 42, 67, 2, 91, 0, 18, 8, 0, 6, 79, 98, 106, 101, 99, 116, 18, 26, 0, 24, 103, 101, 116, 79, 119, 110, 80, 114, 111, 112, 101, 114, 116, 121, 68, 101, 115, 99, 114, 105, 112, 116, 111, 114, 29, 40, 78, 28, 67, 2, 91, 0, 18, 10, 0, 8, 100, 111, 99, 117, 109, 101, 110, 116, 18, 10, 0, 8, 108, 111, 99, 97, 116, 105, 111, 110, 113, 8, 0, 6, 111, 114, 105, 103, 105, 110, 18, 5, 0, 3, 103, 101, 116, 18, 6, 0, 4, 110, 97, 109, 101, 113, 12, 0, 10, 103, 101, 116, 32, 111, 114, 105, 103, 105, 110, 30, 21, 30, 19, 125, 17, 25, 15, 18, 7, 0, 5, 69, 114, 114, 111, 114, 29, 4, 113, 2, 0, 0, 58, 0, 88, 163, 1, 57, 135, 1, 34, 0, 78, 115, 67, 2, 91, 0, 78, 101, 67, 2, 91, 0, 95, 88, 78, 42, 67, 2, 91, 0, 18, 8, 0, 6, 79, 98, 106, 101, 99, 116, 18, 26, 0, 24, 103, 101, 116, 79, 119, 110, 80, 114, 111, 112, 101, 114, 116, 121, 68, 101, 115, 99, 114, 105, 112, 116, 111, 114, 29, 42, 78, 28, 67, 2, 91, 0, 18, 10, 0, 8, 100, 111, 99, 117, 109, 101, 110, 116, 18, 10, 0, 8, 108, 111, 99, 97, 116, 105, 111, 110, 113, 10, 0, 8, 104, 111, 115, 116, 110, 97, 109, 101, 18, 5, 0, 3, 103, 101, 116, 18, 6, 0, 4, 110, 97, 109, 101, 113, 14, 0, 12, 103, 101, 116, 32, 104, 111, 115, 116, 110, 97, 109, 101, 30, 21, 30, 19, 125, 17, 25, 15, 18, 7, 0, 5, 69, 114, 114, 111, 114, 29, 4, 113, 2, 0, 0, 58, 0, 89, 50, 95, 48, 78, 22, 67, 2, 91, 0, 18, 9, 0, 7, 99, 111, 110, 115, 111, 108, 101, 18, 5, 0, 3, 108, 111, 103, 29, 22, 113, 20, 0, 6, 175, 231, 1, 131, 177, 1, 161, 208, 1, 140, 181, 2, 144, 196, 1, 159, 165, 1, 0, 61, 18, 3, 0, 1, 101, 30, 54, 30, 52, 89, 50, 95, 48, 78, 22, 67, 2, 91, 0, 18, 9, 0, 7, 99, 111, 110, 115, 111, 108, 101, 18, 5, 0, 3, 108, 111, 103, 29, 22, 113, 20, 0, 6, 175, 231, 1, 131, 177, 1, 161, 208, 1, 140, 181, 2, 177, 178, 1, 165, 154, 2, 58, 0]);

File diff suppressed because one or more lines are too long

View File

@ -1,8 +0,0 @@
console.log(top==window)
console.log(top==parent)
console.log(top.self==window)
console.log(top.self.window==window.top.self)
console.log(self.window.top==top.window.self);
console.log(self.window.top.self.top==top.window.self);
console.log(self.window.top.self.top==top.window.self.window);

File diff suppressed because one or more lines are too long

View File

@ -1,111 +0,0 @@
//WindowProperties 删除构造方法
delete WindowProperties.prototype.constructor;
//代理失效
var window_=this; 底下用window_
//两个都需要补
Object.getOwnPropertyDescriptors(Window)
Object.getOwnPropertyDescriptors(Window.prototype)
//location检测
//代理检测
// self=window;
// top=window
// window==self ; ///true
// window =new Proxy(window,{});
// window==self;//false
//需要连续赋值,可以过代理检测
// top=self=window=new Proxy(window,{})
//解决重复代理
bodavm.memory.symbolProxy=Symbol("proxy") //独一无二的属性,标记是否代理
if (bodavm.memory.symbolProxy in obj){
return obj
}
//解决重复代理
Object.defineProperty(obj,bodavm.memory.symbolProxy,{
configurable:false,
enumerable:false,
writable:false,
value:true
})
//代理失效 ,代理的对象没有被代理上
console.log(document.createElement===document.createElement)
//实现Document.prototype.activeElement()调用报错
if(Object.getOwnPropertyDescriptor(obj,"constructor")!==undefined){
if (Object.getOwnPropertyDescriptor(self,"constructor") !==undefined){
return bodavm.toolsFunc.throwError("TypeError","Illegal invocation")
}
}
//过滤bodavm.memory.symbolProxy与"eval"
//node环境和vm2环境中的监测点过滤
// 删除浏览器中不存在的对象
delete global;
delete GLOBAL;
delete VMError;
delete Buffer;
delete WindowProperties
delete process;
delete root;
//在原型对象上不能通过原型对象获取,不在自身上可以通过自身获取
a=document.createElement("div")
a.align=123
Object.getOwnPropertyDescriptors(a,'align')
//鼠标轨迹
//检测点
function test(){}
Object.getOwnPropertyDescriptor(window,'test')
//
var r={}
r.__proto__=document
r.location
var b={}
b=Screen.prototype
b.width
var b={}
b.__proto__=Screen.prototype
b.width
//document.all
//window.length iframe
// JSON.stringify(console)
"FSSBBIl1UgzbN7N80T=4B.zKNh3jQsKMZLAyeqQs7QJwaZPeSafzY3KH2cdc0RyVUYgsIPrb_buCwzg59VBqHJbjQAXky9B_J5am_szA1nWrHhagAii3e0x52q2c0st02n4qjdiGKI_Q5W2b2xEaLujGn0notNXB0uevYFRYKwQ0R.naBqJsjWQK8SQD9HVg8kzNCXC0W1OLMLWFS4AGvo2i_BMtcTi.IyV2X5xsDcz9;"

File diff suppressed because one or more lines are too long

View File

@ -1,36 +0,0 @@
<html>
<head>
<title>浏览器事件补齐</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<div id="testDiv" style="width: 100px;height: 100px;background-color: red">
</div>
</body>
<script>
window.addEventListener("load", function (event) {
debugger
let span = document.createElement("span");
if (event.isTrusted) {
span.id = "loadTest";
span.innerText = "load事件触发";
document.body.append(span);
};
});
document.getElementById("testDiv").addEventListener("click", function (event) {
debugger
if (event.isTrusted) {
event.target.innerText = "testDiv被点击";
};
});
</script>
</html>

View File

@ -17,7 +17,7 @@ const env=require(`${config_path}/env.config`)
fs.writeFileSync(`${run_path}/log.txt`,"") fs.writeFileSync(`${run_path}/log.txt`,"")
let bohtml_=fs.readFileSync('D:\\My_Dir\\env_xbb_lastest_jsdom\\run\\run.html').toString('utf-8') let bohtml_=fs.readFileSync('.\\env_xbb_lastest_jsdom\\run\\run.html').toString('utf-8')
const dom = new JSDOM(bohtml_, const dom = new JSDOM(bohtml_,
{ {
url: "http://www.fangdi.com.cn/", url: "http://www.fangdi.com.cn/",

View File

@ -17,7 +17,7 @@
} }
} }
log += "\r\n" log += "\r\n"
bofs.appendFileSync(`D:/My_Dir/env_xbb_lastest_jsdom/run/log.txt`, log) bofs.appendFileSync(`./env_xbb_lastest_jsdom/run/log.txt`, log)
} }
//hook console,让他自动调用printlog //hook console,让他自动调用printlog
console.log_ = console.log; console.log_ = console.log;

View File

@ -1,204 +0,0 @@
bodavm.toolsFunc.HTMLParser = function HTMLParser(data) {
let data_=data
data=data.replace(/<!-[\s\S]*?-->/g,'').replace(/\/\/[\s\S]*?\n/g,'')
// debugger
let tempdata;
if(data.length <1){
tempdata=data_
}
// debugger
// 最外层模拟的节点
const nodeType = {
TEXT: 'text',
ELEMENT: 'element',
};
// 最外层增加一个模拟的根节点标签
const frameflag = 'rootnode';
// 计算一个完整标签的范围eg. [0, 50]
const createRange = (startPos, endPos) => {
// 因为最外层模拟了 <rootnode>,所以需要将这部分长度减掉
const frameFlagOffset = frameflag.length + 2;
return [startPos - frameFlagOffset, endPos - frameFlagOffset]
};
const root = {
_tagName: '#document',
_children: [],
_idelements: {},
_className: {},
_tagelements: {},
_innerHtml:[]
};
// 设置 root 为父节点
let currentParent = root;
// 栈管理
const stack = [root];
let lastTextPos = -1;
// 找到数组的最后一项
function arrBack(arr) {
return arr[arr.length - 1];
}
// ...开始遍历 /解析
// 将模拟的根节点和需要解析的 html 拼接
data = `<${frameflag}>${data}</${frameflag}>`;
const kMarkupPattern = /<(\/?)([a-zA-Z][-.:0-9_a-zA-Z]*)((?:\s+[^>]*?(?:(?:'[^']*')|(?:"[^"]*"))?)*)\s*(\/?)>/g;
while ((match = kMarkupPattern.exec(data))) {
/**
* matchText: 匹配的字符 eg. <span id="xxx">
* leadingSlash: 是否为闭合标签 eg. /
* tagName: 标签名 eg. span
* attributes: 属性 eg. id="xxx"
* closingSlash: 是否为自闭合 eg. /
*/
let { 0: matchText, 1: leadingSlash, 2: tagName, 3: attributes, 4: closingSlash } = match;
// 本次匹配到的字符串
const matchLength = matchText.length;
// 本次匹配的起始位置
const tagStartPos = kMarkupPattern.lastIndex - matchLength;
// 本次匹配的末尾位置
const tagEndPos = kMarkupPattern.lastIndex;
if (lastTextPos > -1) {
// 处理文本eg. hello world
// 上次匹配的末尾位置 + 本次匹配的字符长度 小于 本次匹配的末尾位置就说明中间有 text这个稍微想下其实还是比较好理解的
// 如果没有 textlastTextPos + matchLength 都会等于 tagEndPos
// 上次匹配的末尾位置到本次匹配的起始位置
const text = data.substring(lastTextPos, tagStartPos);
// if (text.indexOf('<!') == -1 || text.indexOf('->') == -1) {
//过滤innerHTML中的特殊字符
let text_filter = text.replace(/\n/g, '').replace(/\t/g, '')
if (text_filter.length > 0) {
currentParent._innerHtml.push({
type: nodeType.TEXT,
range: createRange(lastTextPos, tagStartPos),
value: text_filter,
});
}
// }
}else if(tempdata){
currentParent._innerHtml.push({
type: nodeType.TEXT,
range: [0,0],
value: tempdata,
});
tempdata=undefined
}
// 记录上次匹配的位置
lastTextPos = kMarkupPattern.lastIndex;
// 如果匹配到的标签是模拟标签,就跳过
if (tagName === frameflag) continue;
// ...处理 nodeType 为 element 逻辑
if (!leadingSlash) {
const attrs = {};
// 解析 id、class 属性,并且挂到 attrs 对象下
const kAttributePattern = /(?:^|\s)(id|type|href|value|class|style|src|content|target|onClick|r|rel|name|http-equiv|charset)\s*=\s*((?:'[^']*')|(?:"[^"]*")|\S+)/gi;
for (let attMatch; (attMatch = kAttributePattern.exec(attributes));) {
const { 1: key, 2: val } = attMatch;
// 属性值是否带引号
const isQuoted = val[0] === `'` || val[0] === `"`;
attrs[key.toLowerCase()] = isQuoted ? val.slice(1, val.length - 1) : val;
}
// debugger
const currentNode = {
_tagName: tagName,
_attrs: attrs,
_rawAttrs: attributes.slice(1),
_type: nodeType.ELEMENT,
// 这里的 range 不一定是正确的 range需要匹配到闭标签以后更新
_range: createRange(tagStartPos, tagEndPos),
_children: [],
_parentNode: currentParent,
_innerHtml:[]
};
// if(currentNode._tagName=='script'){debugger}
// console.log('标签',currentNode._tagName)
currentNode.__proto__ = bodavm.toolsFunc.setProto(currentNode._tagName)
// debugger
// currentNode
if (attrs['id']) {
root._idelements[attrs['id']] = currentNode
}
if (attrs['class']) {
if (root['_className'][attrs['class']] == undefined) {
root['_className'][attrs['class']] = []
}
// debugger
root._className[attrs['class']].push(currentNode)
}
let root_tagelement = root._tagelements[tagName]
if (root_tagelement) {
root._tagelements[tagName].push(currentNode)
} else {
root._tagelements[tagName] = []
root._tagelements[tagName].push(currentNode)
}
// if (currentNode.tagName=='head'){debugger}
// 将当前节点信息放入到 currentParent 的 children 中
currentParent._children.push(currentNode);
// 重置 currentParent 节点为当前节点
currentParent = currentNode;
// 将每个节点依次塞到栈中,然后在后面的闭标签中以栈的方式释放
stack.push(currentParent);
// debugger
}
// 自闭合元素
const kSelfClosingElements = {
// area: true,
// img: true,
// meta:true,
// frame:true,
// embed:true,
// keygen:true,
// source:true,
// base:true,
// hr:true,
// br:true,
input:true,
// link:true, area: true,
img: true,
meta: true,
link: true,
area: true,
br:true,
// '!DOCTYPE':true,
// '!--':true
// ...省略了部分标签
};
if (leadingSlash || closingSlash || kSelfClosingElements[tagName]) {
// 开闭标签名是否匹配,比如有可能写成 <div></div1>,这种就需要异常处理
if (currentParent._tagName === tagName) {
// debugger
// 更新 range之前处理开标签算出的 range 是不包含闭标签的
currentParent._range[1] = createRange(-1, Math.max(lastTextPos, tagEndPos))[1];
// 将处理完的开闭标签踢出
stack.pop();
// 将 stack 的最后一个节点赋值给 currentParent
currentParent = arrBack(stack);
} else {
// <div></div1>,异常直接从栈中踢出,不更新 range
stack.pop();
currentParent = arrBack(stack);
}
}
}
// 通过处理,将 stack 返回就是最终的结果
// debugger
return stack;
}