mirror of
https://github.com/xuxiaobo-bobo/boda_jsEnv.git
synced 2025-04-22 11:41:11 +08:00
1559 lines
77 KiB
JavaScript
1559 lines
77 KiB
JavaScript
//主要用来保护伪造的函数 让其更难被识破
|
||
/*
|
||
保存原函数
|
||
修改原函数为自定义函数
|
||
自定义函数里面修改逻辑然后调用原函数
|
||
*/
|
||
;;
|
||
!function () {
|
||
bodaEnv.toolsFunc.getApi=function(_api){
|
||
let boreq=new XMLHttpRequest()
|
||
boreq.open('POST',_api,true)
|
||
let _res=bodaEnv.toolsFunc.getObjWeakMapProtoAttr.call(boreq)['open'][1]
|
||
boreq=null
|
||
return _res
|
||
}
|
||
|
||
bodaEnv.toolsFunc.doRTClistener=function(){
|
||
//RTC事件执行
|
||
if (bodaEnv.memory.RTCPeerConnection.length>0){
|
||
let _RTCList=bodaEnv.memory.RTCPeerConnection
|
||
|
||
for (let _RTC of _RTCList){
|
||
let _onicecandidate=bodaEnv.toolsFunc.getObjWeakMapProtoAttr.call(_RTC,'onicecandidate')
|
||
if (_onicecandidate){
|
||
let _event=new bodaEnv.memory.globlProtoObj['RTCPeerConnectionIceEvent']('bobo')
|
||
window.event=_event
|
||
bodaEnv.toolsFunc.defineProperty_bo(_event,'isTrusted',{
|
||
set:undefined,
|
||
enumerable:true,
|
||
configurable:false,
|
||
get:function isTrusted (){return bodaEnv.toolsFunc.dispatch(this,window, "window", "isTrusted_get", arguments)}
|
||
})
|
||
bodaEnv.toolsFunc.console_copy(`开始执行 RTC 事件 当前 事件 :: ${_RTC}`)
|
||
let _localDescription=new bodaEnv.memory.globlProtoObj['RTCSesbodaDescription']('bobo')
|
||
bodaEnv.toolsFunc.setObjWeakMapProtoAttr.call(_RTC,'localDescription',_localDescription)
|
||
_onicecandidate.call(_RTC,_event)
|
||
|
||
}
|
||
}
|
||
}
|
||
}
|
||
bodaEnv.toolsFunc.getRandomNumber=function (min,max) {
|
||
// var min = 0.91;
|
||
// var max = 0.99;
|
||
// 保留两位小数
|
||
return (Math.random() * (max - min) + min).toFixed(2);
|
||
|
||
}
|
||
bodaEnv.toolsFunc.getRandomInteger=function (min,max){
|
||
// var min = 400;
|
||
// var max = 1000;
|
||
// Math.floor 用于向下取整
|
||
return Math.floor(Math.random() * (max - min + 1) ) + min;
|
||
}
|
||
|
||
bodaEnv.toolsFunc.generateRandomString= function (length) {
|
||
var text = '';
|
||
var possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
|
||
|
||
for (var i = 0; i < length-1; i++) {
|
||
text += possible.charAt(Math.floor(Math.random() * possible.length));
|
||
}
|
||
|
||
// 保证"="只出现在字符串结尾
|
||
text += '=';
|
||
|
||
return text;
|
||
}
|
||
|
||
|
||
bodaEnv.toolsFunc.initEnvFingerPrint=function(){
|
||
//初始化环境内指纹
|
||
//canvas
|
||
//navigator
|
||
//
|
||
let fingerPrintList={
|
||
'WebGLRenderingContext_getParameter_37446':[
|
||
"ANGLE (Intel, Intel(R) UHD Graphics 630 (0x00003E92) Direct3D11 vs_5_0 ps_5_0, D3D11)",
|
||
"ANGLE (Intel, Intel(R) Iris Plus Graphics 640 (0x00003E93) Direct3D11 vs_5_0 ps_5_0, D3D11)",
|
||
"ANGLE (Intel, Intel(R) Iris Plus Graphics 645 (0x00003E94) Direct3D11 vs_5_0 ps_5_0, D3D11)",
|
||
"ANGLE (Intel, Intel(R) UHD Graphics 610 (0x00003E76) Direct3D11 vs_5_0 ps_5_0, D3D11)",
|
||
"ANGLE (Intel, Intel(R) UHD Graphics 615 (0x00003E78) Direct3D11 vs_5_0 ps_5_0, D3D11)",
|
||
"ANGLE (Intel, Intel(R) Iris Pro Graphics 5200 (0x0000D26) Direct3D11 vs_5_0 ps_5_0, D3D11)",
|
||
"ANGLE (Intel, Intel(R) Iris Graphics 5100 (0x0000D28) Direct3D11 vs_5_0 ps_5_0, D3D11)",
|
||
"ANGLE (Intel, Intel(R) HD Graphics 5000 (0x0000D22) Direct3D11 vs_5_0 ps_5_0, D3D11)",
|
||
"ANGLE (Intel, Intel(R) HD Graphics 4400 (0x0000A16) Direct3D11 vs_5_0 ps_5_0, D3D11)",
|
||
"ANGLE (Intel, Intel(R) HD Graphics 4600 (0x0000C16) Direct3D11 vs_5_0 ps_5_0, D3D11)",
|
||
],
|
||
'BatteryManager_level_get':bodaEnv.toolsFunc.getRandomNumber(0.91,0.99),
|
||
'BatteryManager_chargingTime_get':bodaEnv.toolsFunc.getRandomInteger(400,1000),
|
||
'webgl':'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAABccqhmAAAAAXNSR0IArs4c6QAABkhJREFUeF7t1AERAAAIAjHpX9ogPxswPHaOAIGswLLJBSdA4AyAJyAQFjAA4fJFJ2AA/ACBsIABCJcvOgED4AcIhAUMQLh80QkYAD9AICxgAMLli07AAPgBAmEBAxAuX3QCBsAPEAgLGIBw+aITMAB+gEBYwACEyxedgAHwAwTCAgYgXL7oBAyAHyAQFjAA4fJFJ2AA/ACBsIABCJcvOgED4AcIhAUMQLh80QkYAD9AICxgAMLli07AAPgBAmEBAxAuX3QCBsAPEAgLGIBw+aITMAB+gEBYwACEyxedgAHwAwTCAgYgXL7oBAyAHyAQFjAA4fJFJ2AA/ACBsIABCJcvOgED4AcIhAUMQLh80QkYAD9AICxgAMLli07AAPgBAmEBAxAuX3QCBsAPEAgLGIBw+aITMAB+gEBYwACEyxedgAHwAwTCAgYgXL7oBAyAHyAQFjAA4fJFJ2AA/ACBsIABCJcvOgED4AcIhAUMQLh80QkYAD9AICxgAMLli07AAPgBAmEBAxAuX3QCBsAPEAgLGIBw+aITMAB+gEBYwACEyxedgAHwAwTCAgYgXL7oBAyAHyAQFjAA4fJFJ2AA/ACBsIABCJcvOgED4AcIhAUMQLh80QkYAD9AICxgAMLli07AAPgBAmEBAxAuX3QCBsAPEAgLGIBw+aITMAB+gEBYwACEyxedgAHwAwTCAgYgXL7oBAyAHyAQFjAA4fJFJ2AA/ACBsIABCJcvOgED4AcIhAUMQLh80QkYAD9AICxgAMLli07AAPgBAmEBAxAuX3QCBsAPEAgLGIBw+aITMAB+gEBYwACEyxedgAHwAwTCAgYgXL7oBAyAHyAQFjAA4fJFJ2AA/ACBsIABCJcvOgED4AcIhAUMQLh80QkYAD9AICxgAMLli07AAPgBAmEBAxAuX3QCBsAPEAgLGIBw+aITMAB+gEBYwACEyxedgAHwAwTCAgYgXL7oBAyAHyAQFjAA4fJFJ2AA/ACBsIABCJcvOgED4AcIhAUMQLh80QkYAD9AICxgAMLli07AAPgBAmEBAxAuX3QCBsAPEAgLGIBw+aITMAB+gEBYwACEyxedgAHwAwTCAgYgXL7oBAyAHyAQFjAA4fJFJ2AA/ACBsIABCJcvOgED4AcIhAUMQLh80QkYAD9AICxgAMLli07AAPgBAmEBAxAuX3QCBsAPEAgLGIBw+aITMAB+gEBYwACEyxedgAHwAwTCAgYgXL7oBAyAHyAQFjAA4fJFJ2AA/ACBsIABCJcvOgED4AcIhAUMQLh80QkYAD9AICxgAMLli07AAPgBAmEBAxAuX3QCBsAPEAgLGIBw+aITMAB+gEBYwACEyxedgAHwAwTCAgYgXL7oBAyAHyAQFjAA4fJFJ2AA/ACBsIABCJcvOgED4AcIhAUMQLh80QkYAD9AICxgAMLli07AAPgBAmEBAxAuX3QCBsAPEAgLGIBw+aITMAB+gEBYwACEyxedgAHwAwTCAgYgXL7oBAyAHyAQFjAA4fJFJ2AA/ACBsIABCJcvOgED4AcIhAUMQLh80QkYAD9AICxgAMLli07AAPgBAmEBAxAuX3QCBsAPEAgLGIBw+aITMAB+gEBYwACEyxedgAHwAwTCAgYgXL7oBAyAHyAQFjAA4fJFJ2AA/ACBsIABCJcvOgED4AcIhAUMQLh80QkYAD9AICxgAMLli07AAPgBAmEBAxAuX3QCBsAPEAgLGIBw+aITMAB+gEBYwACEyxedgAHwAwTCAgYgXL7oBAyAHyAQFjAA4fJFJ2AA/ACBsIABCJcvOgED4AcIhAUMQLh80QkYAD9AICxgAMLli07AAPgBAmEBAxAuX3QCBsAPEAgLGIBw+aITMAB+gEBYwACEyxedgAHwAwTCAgYgXL7oBAyAHyAQFjAA4fJFJ2AA/ACBsIABCJcvOgED4AcIhAUMQLh80QkYAD9AICxgAMLli07AAPgBAmEBAxAuX3QCBsAPEAgLGIBw+aITMAB+gEBYwACEyxedgAHwAwTCAgYgXL7oBAyAHyAQFjAA4fJFJ2AA/ACBsIABCJcvOgED4AcIhAUMQLh80QkYAD9AICxgAMLli07AAPgBAmEBAxAuX3QCBsAPEAgLGIBw+aITMAB+gEBYwACEyxedwAOf2gEBwEDqbgAAAABJRU5ErkJggg6'+bodaEnv.toolsFunc.generateRandomString(36)+'=',
|
||
'canvas':'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAACWCAYAAABkW7XSAAAEYklEQVR4Xu3UAQkAAAwCwdm/9HI83BLIOdw5AgQIRAQWySkmAQIEzmB5AgIEMgIGK1OVoAQIGCw/QIBARsBgZaoSlAABg+UHCBDICBisTFWCEiBgsPwAAQIZAYOVqUpQAgQMlh8gQCAjYLAyVQlKgIDB8gMECGQEDFamKkEJEDBYfoAAgYyAwcpUJSgBAgbLDxAgkBEwWJmqBCVAwGD5AQIEMgIGK1OVoAQIGCw/QIBARsBgZaoSlAABg+UHCBDICBisTFWCEiBgsPwAAQIZAYOVqUpQAgQMlh8gQCAjYLAyVQlKgIDB8gMECGQEDFamKkEJEDBYfoAAgYyAwcpUJSgBAgbLDxAgkBEwWJmqBCVAwGD5AQIEMgIGK1OVoAQIGCw/QIBARsBgZaoSlAABg+UHCBDICBisTFWCEiBgsPwAAQIZAYOVqUpQAgQMlh8gQCAjYLAyVQlKgIDB8gMECGQEDFamKkEJEDBYfoAAgYyAwcpUJSgBAgbLDxAgkBEwWJmqBCVAwGD5AQIEMgIGK1OVoAQIGCw/QIBARsBgZaoSlAABg+UHCBDICBisTFWCEiBgsPwAAQIZAYOVqUpQAgQMlh8gQCAjYLAyVQlKgIDB8gMECGQEDFamKkEJEDBYfoAAgYyAwcpUJSgBAgbLDxAgkBEwWJmqBCVAwGD5AQIEMgIGK1OVoAQIGCw/QIBARsBgZaoSlAABg+UHCBDICBisTFWCEiBgsPwAAQIZAYOVqUpQAgQMlh8gQCAjYLAyVQlKgIDB8gMECGQEDFamKkEJEDBYfoAAgYyAwcpUJSgBAgbLDxAgkBEwWJmqBCVAwGD5AQIEMgIGK1OVoAQIGCw/QIBARsBgZaoSlAABg+UHCBDICBisTFWCEiBgsPwAAQIZAYOVqUpQAgQMlh8gQCAjYLAyVQlKgIDB8gMECGQEDFamKkEJEDBYfoAAgYyAwcpUJSgBAgbLDxAgkBEwWJmqBCVAwGD5AQIEMgIGK1OVoAQIGCw/QIBARsBgZaoSlAABg+UHCBDICBisTFWCEiBgsPwAAQIZAYOVqUpQAgQMlh8gQCAjYLAyVQlKgIDB8gMECGQEDFamKkEJEDBYfoAAgYyAwcpUJSgBAgbLDxAgkBEwWJmqBCVAwGD5AQIEMgIGK1OVoAQIGCw/QIBARsBgZaoSlAABg+UHCBDICBisTFWCEiBgsPwAAQIZAYOVqUpQAgQMlh8gQCAjYLAyVQlKgIDB8gMECGQEDFamKkEJEDBYfoAAgYyAwcpUJSgBAgbLDxAgkBEwWJmqBCVAwGD5AQIEMgIGK1OVoAQIGCw/QIBARsBgZaoSlAABg+UHCBDICBisTFWCEiBgsPwAAQIZAYOVqUpQAgQMlh8gQCAjYLAyVQlKgIDB8gMECGQEDFamKkEJEDBYfoAAgYyAwcpUJSgBAgbLDxAgkBEwWJmqBCVAwGD5AQIEMgIGK1OVoAQIGCw/QIBARsBgZaoSlACBB1YxAJfjJb2jAAAAAElFTkSuQmCC'+bodaEnv.toolsFunc.generateRandomString(36),
|
||
'screenDimensions': [
|
||
{'screen_width': 1440, 'screen_height': 900, 'screen_availWidth': 1400, 'screen_availHeight': 850, 'window_innerWidth': 1440, 'window_innerHeight': 791, 'window_outerWidth': 1440, 'window_outerHeight': 912},
|
||
{'screen_width': 1366, 'screen_height': 768, 'screen_availWidth': 1336, 'screen_availHeight': 718, 'window_innerWidth': 1360, 'window_innerHeight': 680, 'window_outerWidth': 1360, 'window_outerHeight': 800},
|
||
{'screen_width': 1280, 'screen_height': 800, 'screen_availWidth': 1250, 'screen_availHeight': 750, 'window_innerWidth': 1274, 'window_innerHeight': 650, 'window_outerWidth': 1274, 'window_outerHeight': 770},
|
||
{'screen_width': 1920, 'screen_height': 1080, 'screen_availWidth': 1890, 'screen_availHeight': 1030, 'window_innerWidth': 1914, 'window_innerHeight': 930, 'window_outerWidth': 1914, 'window_outerHeight': 1050},
|
||
{'screen_width': 1600, 'screen_height': 900, 'screen_availWidth': 1570, 'screen_availHeight': 850, 'window_innerWidth': 1594, 'window_innerHeight': 750, 'window_outerWidth': 1594, 'window_outerHeight': 870},
|
||
{'screen_width': 1024, 'screen_height': 768, 'screen_availWidth': 994, 'screen_availHeight': 718, 'window_innerWidth': 1018, 'window_innerHeight': 618, 'window_outerWidth': 1018, 'window_outerHeight': 738},
|
||
{'screen_width': 800, 'screen_height': 600, 'screen_availWidth': 770, 'screen_availHeight': 550, 'window_innerWidth': 794, 'window_innerHeight': 450, 'window_outerWidth': 794, 'window_outerHeight': 570},
|
||
{'screen_width': 640, 'screen_height': 480, 'screen_availWidth': 610, 'screen_availHeight': 430, 'window_innerWidth': 634, 'window_innerHeight': 330, 'window_outerWidth': 634, 'window_outerHeight': 450},
|
||
{'screen_width': 2560, 'screen_height': 1440, 'screen_availWidth': 2530, 'screen_availHeight': 1390, 'window_innerWidth': 2554, 'window_innerHeight': 1290, 'window_outerWidth': 2554, 'window_outerHeight': 1410},
|
||
{'screen_width': 1368, 'screen_height': 912, 'screen_availWidth': 1338, 'screen_availHeight': 862, 'window_innerWidth': 1362, 'window_innerHeight': 762, 'window_outerWidth': 1362, 'window_outerHeight': 882},
|
||
{'screen_width': 1280, 'screen_height': 960, 'screen_availWidth': 1250, 'screen_availHeight': 910, 'window_innerWidth': 1274, 'window_innerHeight': 810, 'window_outerWidth': 1274, 'window_outerHeight': 930},
|
||
{'screen_width': 1536, 'screen_height': 864, 'screen_availWidth': 1506, 'screen_availHeight': 814, 'window_innerWidth': 1530, 'window_innerHeight': 714, 'window_outerWidth': 1530, 'window_outerHeight': 834},
|
||
{'screen_width': 1680, 'screen_height': 1050, 'screen_availWidth': 1650, 'screen_availHeight': 1000, 'window_innerWidth': 1674, 'window_innerHeight': 900, 'window_outerWidth': 1674, 'window_outerHeight': 1020},
|
||
{'screen_width': 1152, 'screen_height': 864, 'screen_availWidth': 1122, 'screen_availHeight': 814, 'window_innerWidth': 1146, 'window_innerHeight': 714, 'window_outerWidth': 1146, 'window_outerHeight': 834},
|
||
{'screen_width': 1440, 'screen_height': 900, 'screen_availWidth': 1410, 'screen_availHeight': 850, 'window_innerWidth': 1434, 'window_innerHeight': 750, 'window_outerWidth': 1434, 'window_outerHeight': 870},
|
||
{'screen_width': 2048, 'screen_height': 1152, 'screen_availWidth': 2018, 'screen_availHeight': 1102, 'window_innerWidth': 2042, 'window_innerHeight': 1002, 'window_outerWidth': 2042, 'window_outerHeight': 1122},
|
||
{'screen_width': 1280, 'screen_height': 1024, 'screen_availWidth': 1250, 'screen_availHeight': 974, 'window_innerWidth': 1274, 'window_innerHeight': 874, 'window_outerWidth': 1274, 'window_outerHeight': 994},
|
||
{'screen_width': 1360, 'screen_height': 768, 'screen_availWidth': 1330, 'screen_availHeight': 718, 'window_innerWidth': 1354, 'window_innerHeight': 528, 'window_outerWidth': 1354, 'window_outerHeight': 648},
|
||
{'screen_width': 1600, 'screen_height': 1200, 'screen_availWidth': 1570, 'screen_availHeight': 1150, 'window_innerWidth': 1594, 'window_innerHeight': 1050, 'window_outerWidth': 1594, 'window_outerHeight': 1170},
|
||
{'screen_width': 1400, 'screen_height': 1050, 'screen_availWidth': 1370, 'screen_availHeight': 1000, 'window_innerWidth': 1394, 'window_innerHeight': 900, 'window_outerWidth': 1394, 'window_outerHeight': 1020}
|
||
]}
|
||
let getParameter_37446=fingerPrintList['WebGLRenderingContext_getParameter_37446']
|
||
bodaEnv.memory.WebGLRenderingContext_getParameter_37446=getParameter_37446[Math.floor(Math.random() * (getParameter_37446.length))]
|
||
bodaEnv.memory.BatteryManager_level_get=fingerPrintList['BatteryManager_level_get']
|
||
bodaEnv.memory.BatteryManager_chargingTime_get=fingerPrintList['BatteryManager_chargingTime_get']
|
||
bodaEnv.memory.HTMLCanvasElement_toDataURL_canvas=fingerPrintList['canvas']
|
||
bodaEnv.memory.HTMLCanvasElement_toDataURL_webgl=fingerPrintList['webgl']
|
||
let _screenDimensions=fingerPrintList['screenDimensions']
|
||
bodaEnv.memory.screenDimensions=_screenDimensions[Math.floor(Math.random() * (_screenDimensions.length))]
|
||
fingerPrintList=null
|
||
getParameter_37446=null
|
||
screenDimensions_=null
|
||
}
|
||
|
||
bodaEnv.toolsFunc.SetStyleProp=function(target){
|
||
// let styleObj={};
|
||
// 给 element 对象 设置css 样式 同时也会给element.style 设置css样式
|
||
let _style=target.getAttribute('style')
|
||
if (!_style) return null
|
||
let _styleNum=0
|
||
let _styleInclude=_style.includes(';')
|
||
// debugger
|
||
if (_styleInclude){
|
||
let _tempStyle=_style.split(';')
|
||
// try{
|
||
for (let _obj of _tempStyle){
|
||
if (!(_obj.length)) continue
|
||
let spStyle=_obj.split(':')
|
||
let _name=spStyle[0].trim()
|
||
let tempName=_name
|
||
let _value =spStyle[1].trim()
|
||
if (!_name || !_value){debugger}
|
||
target.style[_name]=_value
|
||
target.style[_styleNum]=_name
|
||
tempName.split('-').map((word, index) => index === 0 ? word : word.charAt(0).toUpperCase() + word.slice(1)).join('');
|
||
target.style[tempName]=_value
|
||
bodaEnv.toolsFunc.setObjWeakMapProtoAttr.call(target,_name,_value)
|
||
bodaEnv.toolsFunc.setObjWeakMapProtoAttr.call(target,tempName,_value)
|
||
_styleNum++
|
||
}
|
||
|
||
// }catch(e){
|
||
// debugger
|
||
// }
|
||
|
||
}
|
||
|
||
|
||
}
|
||
|
||
bodaEnv.toolsFunc.checkObjIsIframe=function(target,proto,funcName){
|
||
// debugger
|
||
let isiframe=bodaEnv.toolsFunc.getObjWeakMapProtoAttr.call(target,'isiframe')
|
||
if (isiframe){
|
||
let iframeNum=bodaEnv.toolsFunc.getObjWeakMapProtoAttr.call(target,'num')
|
||
let isliveAttr=bodaEnv.toolsFunc.getObjWeakMapProtoAttr.call(target,funcName)
|
||
if (isliveAttr){
|
||
bodaEnv.toolsFunc.console_copy(`iframe ${funcName} ->`, isliveAttr)
|
||
return isliveAttr
|
||
}
|
||
let _instance;
|
||
if (proto.constructor){
|
||
_instance=new proto.constructor('bobo')
|
||
bodaEnv.toolsFunc.console_copy(`iframe ${funcName} ->`, _instance)
|
||
bodaEnv.toolsFunc.setObjWeakMapProtoAttr.call(_instance,'num',iframeNum)
|
||
bodaEnv.toolsFunc.setObjWeakMapProtoAttr.call(_instance,'isiframe',true)
|
||
bodaEnv.toolsFunc.setObjWeakMapProtoAttr.call(target,funcName,_instance)
|
||
}else{
|
||
bodaEnv.toolsFunc.console_copy(`iframe ${funcName} -> res -> null`)
|
||
bodaEnv.toolsFunc.setObjWeakMapProtoAttr.call(target,funcName,null)
|
||
return null
|
||
}
|
||
|
||
return _instance
|
||
}
|
||
}
|
||
|
||
|
||
bodaEnv.toolsFunc.generatorTracker=function (){
|
||
function factorial(n) {
|
||
if (n === 0 || n === 1) {
|
||
return 1;
|
||
} else {
|
||
return n * factorial(n - 1);
|
||
}
|
||
}
|
||
|
||
this._bztsg=function _bztsg(dataTrajectory) {
|
||
var lengthOfData = dataTrajectory.length;
|
||
|
||
function staer(x) {
|
||
var t = (x - dataTrajectory[0][0]) / (dataTrajectory[lengthOfData - 1][0] - dataTrajectory[0][0]);
|
||
let y = [0, 0];
|
||
for (let s = 0; s < dataTrajectory.length; s++) {
|
||
y = y.map((val, index) => val + (dataTrajectory[s][index] * (
|
||
(factorial(lengthOfData - 1) / (factorial(s) * factorial(lengthOfData - 1 - s))) *
|
||
Math.pow(t, s) * Math.pow((1 - t), lengthOfData - 1 - s)
|
||
)));
|
||
}
|
||
return y[1];
|
||
}
|
||
|
||
return staer;
|
||
}
|
||
|
||
this._type=function _type(type, x, numberList) {
|
||
var numberListre = [];
|
||
var pin = (x[1] - x[0]) / numberList;
|
||
|
||
if (type === 0) {
|
||
for (let i = 0; i < numberList; i++) {
|
||
numberListre.push(i * pin);
|
||
}
|
||
} else if (type === 1) {
|
||
for (let i = 0; i < numberList; i++) {
|
||
numberListre.push(1 * Math.pow(i * pin, 2));
|
||
}
|
||
} else if (type === 2) {
|
||
for (let i = 0; i < numberList; i++) {
|
||
numberListre.push(1 * Math.pow(i * pin - x[1], 2));
|
||
}
|
||
} else if (type === 3) {
|
||
var dataTrajectory = [
|
||
[0, 0],
|
||
[(x[1] - x[0]) * 0.8, (x[1] - x[0]) * 0.6],
|
||
[x[1] - x[0], 0]
|
||
];
|
||
var fun = this._bztsg(dataTrajectory);
|
||
numberListre.push(0);
|
||
for (let i = 1; i < numberList; i++) {
|
||
numberListre.push(fun(i * pin) + numberListre[numberListre.length - 1]);
|
||
}
|
||
}
|
||
|
||
var minVal = Math.min(...numberListre);
|
||
var maxVal = Math.max(...numberListre);
|
||
var biaoNumberList = numberListre.map((val) => ((val - minVal) / (maxVal - minVal)) * (x[1] - x[0]) + x[0]);
|
||
biaoNumberList[0] = x[0];
|
||
biaoNumberList[biaoNumberList.length - 1] = x[1];
|
||
return biaoNumberList;
|
||
}
|
||
|
||
this.getFun=function getFun(s) {
|
||
var dataTrajectory = s.map((i) => i.map(parseFloat));
|
||
return this._bztsg(dataTrajectory);
|
||
}
|
||
|
||
this.simulation=function simulation(start, end, le = 1, deviation = 0, bias = 0.5) {
|
||
start = start.map(parseFloat);
|
||
end = end.map(parseFloat);
|
||
let cbb = [];
|
||
|
||
if (le !== 1) {
|
||
var e = (1 - bias) / (le - 1);
|
||
cbb = Array.from({ length: le - 1 }, (_, i) => [bias + e * i, bias + e * (i + 1)]);
|
||
}
|
||
|
||
var dataTrajectoryList = [start];
|
||
let t = [-1, 1][Math.floor(Math.random() * 2)];
|
||
let w = 0;
|
||
|
||
for (var i of cbb) {
|
||
var px1 = start[0] + (end[0] - start[0]) * (Math.random() * (i[1] - i[0]) + i[0]);
|
||
var p = [px1, this._bztsg([start, end])(px1) + t * deviation];
|
||
dataTrajectoryList.push(p);
|
||
w++;
|
||
if (w >= 2) {
|
||
w = 0;
|
||
t = -1 * t;
|
||
}
|
||
}
|
||
|
||
dataTrajectoryList.push(end);
|
||
return { equation: this._bztsg(dataTrajectoryList), P: dataTrajectoryList };
|
||
}
|
||
|
||
this.trackArray=function trackArray(start, end, numberList, le = 1, deviation = 0, bias = 0.5, type = 0, cbb = 0, yhh = 10) {
|
||
var s = [];
|
||
var fun = this.simulation(start, end, le, deviation, bias);
|
||
let w = fun.P;
|
||
fun = fun.equation;
|
||
|
||
if (cbb !== 0) {
|
||
var numberListOfcbb = Math.round(numberList * 0.2 / (cbb + 1));
|
||
numberList -= numberListOfcbb * (cbb + 1);
|
||
|
||
var xTrackArray = this._type(type, [start[0], end[0]], numberList);
|
||
for (var i of xTrackArray) {
|
||
s.push([i, fun(i)]);
|
||
}
|
||
|
||
let dq = yhh / cbb;
|
||
let kg = 0;
|
||
let ends = [...end];
|
||
|
||
for (let i = 0; i < cbb; i++) {
|
||
let d;
|
||
if (kg === 0) {
|
||
d = [
|
||
end[0] + (yhh - dq * i),
|
||
((end[1] - start[1]) / (end[0] - start[0])) * (end[0] + (yhh - dq * i)) +
|
||
(end[1] - ((end[1] - start[1]) / (end[0] - start[0])) * end[0])
|
||
];
|
||
kg = 1;
|
||
} else {
|
||
d = [
|
||
end[0] - (yhh - dq * i),
|
||
((end[1] - start[1]) / (end[0] - start[0])) * (end[0] - (yhh - dq * i)) +
|
||
(end[1] - ((end[1] - start[1]) / (end[0] - start[0])) * end[0])
|
||
];
|
||
kg = 0;
|
||
}
|
||
|
||
var y = this.trackArray(ends, d, numberListOfcbb, 2, 0, 0.5, 0, 0, 10);
|
||
s.push(...y.trackArray);
|
||
ends = [...d];
|
||
}
|
||
|
||
var y = this.trackArray(ends, end, numberListOfcbb, 2, 0, 0.5, 0, 0, 10);
|
||
s.push(...y.trackArray);
|
||
} else {
|
||
var xTrackArray = this._type(type, [start[0], end[0]], numberList);
|
||
for (var i of xTrackArray) {
|
||
s.push([i, fun(i)]);
|
||
}
|
||
}
|
||
|
||
return { trackArray: s, P: w };
|
||
}
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
|
||
bodaEnv.toolsFunc.delHookObj=function (objList){
|
||
///配合globlhook 使用 删除 boda xxx等特字符
|
||
let targetList=['require','addEventListener',
|
||
'dispatchEvent',
|
||
'removeEventListener',
|
||
'TEMPORARY',
|
||
'PERSISTENT',
|
||
'bodaRunPath',
|
||
'bodafs',
|
||
'bodaallundefined',
|
||
'bodaError',
|
||
'bodaTextEncoder',
|
||
'bodaBabelParser',
|
||
'bodaBabeltraverse','bodaDoScript','getValue','bodaEnv','mytime_stamp',
|
||
'bodaBabeltypes',
|
||
'bodaBabelgenerator']
|
||
for (let target of targetList){
|
||
let targetIndex=objList.indexOf(target)
|
||
objList.splice(targetIndex,1)
|
||
}
|
||
|
||
|
||
}
|
||
|
||
bodaEnv.toolsFunc.CSSParse=function(cssText){
|
||
// 移除注释
|
||
cssText = cssText.replace(/\/\*(.*?)\*\//g, '');
|
||
|
||
// 正则表达式匹配选择器和样式规则
|
||
var selectorRegex = /([^\{\}]+)\s*\{([^}]+)\}/g;
|
||
var propertyRegex = /\s*([^:]+)\s*:\s*([^;]+)\s*;/g;
|
||
if (!bodaEnv.memory.styles){
|
||
bodaEnv.memory.styles={}
|
||
}
|
||
|
||
// 解析选择器和样式规则
|
||
var match;
|
||
while ((match = selectorRegex.exec(cssText)) !== null) {
|
||
var selector = null
|
||
if (match[1].trim().split(' ').length >=2){
|
||
selector=match[1].trim().split(' ')[1]
|
||
}else{
|
||
selector=match[1].trim()
|
||
}
|
||
|
||
var rules = match[2];
|
||
|
||
// 解析样式属性
|
||
var properties = {};
|
||
var propertyMatch;
|
||
while ((propertyMatch = propertyRegex.exec(rules)) !== null) {
|
||
var propertyName = propertyMatch[1].trim();
|
||
var propertyValue = propertyMatch[2].trim();
|
||
properties[propertyName] = propertyValue;
|
||
}
|
||
|
||
bodaEnv.memory.styles[selector] = properties;
|
||
}
|
||
|
||
return bodaEnv.memory.styles;
|
||
|
||
}
|
||
|
||
bodaEnv.toolsFunc.dolistener=function(eventName,event_,evnentData){
|
||
/*
|
||
eventName : 事件名称
|
||
event_ : 事件对象
|
||
envnentData : 事件数据
|
||
*/
|
||
bodaEnv.memory.runningListern=true
|
||
bodaEnv.memory.listenerEnd=false
|
||
let eventType=null
|
||
switch (eventName) {
|
||
case 'deviceorientation':
|
||
eventType=new DeviceOrientationEvent('bobo')
|
||
break;
|
||
case 'mousedown' :
|
||
eventType=new MouseEvent('bobo')
|
||
break;
|
||
case 'mousemove' :
|
||
eventType=new MouseEvent('bobo')
|
||
break;
|
||
case 'mouseup' :
|
||
eventType=new MouseEvent('bobo')
|
||
break;
|
||
case 'focus' :
|
||
eventType=new FocusEvent('bobo')
|
||
break;
|
||
case 'window_onload':
|
||
eventType=new Event('bobo')
|
||
break;
|
||
case 'load':
|
||
eventType=new Event('bobo')
|
||
break
|
||
case 'onload':
|
||
eventType=new Event('bobo')
|
||
break
|
||
case 'focusout':
|
||
eventType=new FocusEvent('bobo')
|
||
break
|
||
case 'input':
|
||
eventType=new InputEvent('bobo')
|
||
break
|
||
case 'click':
|
||
eventType=new PointerEvent('bobo')
|
||
break
|
||
default:
|
||
bodaEnv.toolsFunc.console_copy(`${eventName} dolistener 未实现 `)
|
||
}
|
||
|
||
bodaEnv.toolsFunc.console_copy(`当前正在执行的事件 ${event_['type']} -> ${event_} -> ${eventType} -> ${evnentData}`)
|
||
if (eventName=='load' || eventName=='onload'){
|
||
bodaEnv.memory.runningListern=false
|
||
eventType=bodaEnv.toolsFunc.proxy2(eventType,`proxy2::${eventName}`)
|
||
let eventType_=eventType
|
||
window.event=eventType_
|
||
bodaEnv.toolsFunc.defineProperty_bo(event,'isTrusted',{
|
||
set:undefined,
|
||
enumerable:true,
|
||
configurable:false,
|
||
get:function isTrusted (){return bodaEnv.toolsFunc.dispatch(this,window, "window", "isTrusted_get", arguments)}
|
||
})
|
||
// debugger
|
||
bodaEnv.toolsFunc.setObjWeakMapProtoAttr.call(eventType_,'type','load')
|
||
let callback_=event_['callback']
|
||
let self_=event_['self']
|
||
if(!callback_){
|
||
bodaEnv.memory.window['onload'].call(window,eventType_)
|
||
bodaEnv.memory.window['onload']=undefined
|
||
window.event=null
|
||
return
|
||
}
|
||
callback_.call(self_,eventType_)
|
||
window.event=null
|
||
bodaEnv.memory.scriptExecDone=true //load 事件完成 readyState变为complete
|
||
return
|
||
}
|
||
// debugger
|
||
eventType=bodaEnv.toolsFunc.proxy2(eventType,`proxy2::${eventName}`)
|
||
let eventType_=eventType
|
||
window.event=eventType_
|
||
bodaEnv.toolsFunc.defineProperty_bo(event,'isTrusted',{
|
||
set:undefined,
|
||
enumerable:true,
|
||
configurable:false,
|
||
get:function isTrusted (){return bodaEnv.toolsFunc.dispatch(this,window, "window", "isTrusted_get", arguments)}
|
||
})
|
||
let callback_=event_['callback']
|
||
let self_=event_['self']
|
||
|
||
for (let datanum=0;datanum<evnentData.length;datanum++){
|
||
let data_=evnentData[datanum]
|
||
// let tempThis=[self_,eventType_]
|
||
// // debugger
|
||
// for (let _this of tempThis){
|
||
bodaEnv.toolsFunc.setObjWeakMapProtoAttr.call(eventType_,'x',data_['x'])
|
||
bodaEnv.toolsFunc.setObjWeakMapProtoAttr.call(eventType_,'y',data_['y'])
|
||
bodaEnv.toolsFunc.setObjWeakMapProtoAttr.call(eventType_,'clientY',data_['clientY'])
|
||
bodaEnv.toolsFunc.setObjWeakMapProtoAttr.call(eventType_,'clientX',data_['clientX'])
|
||
bodaEnv.toolsFunc.setObjWeakMapProtoAttr.call(eventType_,'target',data_['target'])
|
||
bodaEnv.toolsFunc.setObjWeakMapProtoAttr.call(eventType_,'type',data_['type'])
|
||
bodaEnv.toolsFunc.setObjWeakMapProtoAttr.call(eventType_,'pageX',data_['pageX'])
|
||
bodaEnv.toolsFunc.setObjWeakMapProtoAttr.call(eventType_,'pageY',data_['pageY'])
|
||
bodaEnv.toolsFunc.setObjWeakMapProtoAttr.call(eventType_,'buttons',data_['buttons'])
|
||
bodaEnv.toolsFunc.setObjWeakMapProtoAttr.call(eventType_,'which',data_['which'])
|
||
bodaEnv.toolsFunc.setObjWeakMapProtoAttr.call(eventType_,'alpha',data_['alpha'])
|
||
bodaEnv.toolsFunc.setObjWeakMapProtoAttr.call(eventType_,'beta',data_['beta'])
|
||
bodaEnv.toolsFunc.setObjWeakMapProtoAttr.call(eventType_,'gamma',data_['gamma'])
|
||
bodaEnv.toolsFunc.setObjWeakMapProtoAttr.call(eventType_,'screenX',data_['screenX'])
|
||
bodaEnv.toolsFunc.setObjWeakMapProtoAttr.call(eventType_,'screenY',data_['screenY'])
|
||
bodaEnv.toolsFunc.setObjWeakMapProtoAttr.call(eventType_,'srcElement',data_['srcElement'])
|
||
bodaEnv.toolsFunc.setObjWeakMapProtoAttr.call(eventType_,'timeStamp',data_['timeStamp'])
|
||
// }
|
||
if (datanum ==(evnentData.length -1 ) ){
|
||
// debugger
|
||
bodaEnv.memory.listenerEnd=true
|
||
|
||
}
|
||
callback_.call(self_,eventType_)
|
||
}
|
||
window.event=null
|
||
// bodaEnv.memory.asyncEvent['listener'][eventName].splice(bodaEnv.memory.asyncEvent['listener'][eventName].indexOf(event_),1)
|
||
bodaEnv.toolsFunc.execSetTimeOutDelay10()
|
||
// bodaEnv.memory.runningListern=false
|
||
// if (bodaEnv.memory.asyncEvent['listener2'] && bodaEnv.memory.asyncEvent['listener2'].length){
|
||
// let templistener2=bodaEnv.memory.asyncEvent['listener2']
|
||
// bodaEnv.memory.asyncEvent['listener2'] =[]
|
||
// bodaEnv.memory.doLoopListener(templistener2) //存在bug先不修复
|
||
// }
|
||
}
|
||
bodaEnv.toolsFunc.execSetTimeOutDelay10=function(){
|
||
//运行设置时间为10以下的定时器
|
||
if (bodaEnv.memory.SetTimeOutDelay10 && bodaEnv.memory.SetTimeOutDelay10.length){
|
||
// debugger
|
||
for (const srcSetTimeout of bodaEnv.memory.SetTimeOutDelay10) {
|
||
// debugger
|
||
bodaEnv.toolsFunc.console_copy(`正在执行delay小于10的定时器-->`,srcSetTimeout['callback'])
|
||
if (typeof srcSetTimeout.callback =='function') {
|
||
srcSetTimeout.callback.apply(srcSetTimeout['self'],srcSetTimeout.args)
|
||
}
|
||
else {
|
||
bodaEnv.toolsFunc.console_copy(`${srcSetTimeout['self']} -> execSetTimeOutDelay10.callback 类型为 ->${typeof callback } 不执行`,)
|
||
}
|
||
|
||
}
|
||
bodaEnv.toolsFunc.console_copy(`delay小于10的定时器执行完成-->`)
|
||
|
||
}
|
||
bodaEnv.memory.SetTimeOutDelay10=[]
|
||
|
||
}
|
||
|
||
bodaEnv.toolsFunc.setProto = function setpro(dom,self) {
|
||
//设置原型链
|
||
let tagpro = dom.toUpperCase()
|
||
// debugger
|
||
switch (tagpro) {
|
||
case 'TEXTAREA':
|
||
return new bodaEnv.memory.globlProtoObj["HTMLTextAreaElement"]('bobo')
|
||
case 'NAV':
|
||
return new bodaEnv.memory.globlProtoObj["HTMLElement"]('bobo')
|
||
case 'TABLE':
|
||
return new bodaEnv.memory.globlProtoObj["HTMLTableElement"]('bobo')
|
||
case 'PUNISH-COMPONENT':
|
||
return new bodaEnv.memory.globlProtoObj["HTMLUnknownElement"]('bobo')
|
||
case "MODERNIZR":
|
||
return new bodaEnv.memory.globlProtoObj["HTMLUnknownElement"]('bobo')
|
||
case "APM_DO_NOT_TOUCH":
|
||
return new bodaEnv.memory.globlProtoObj["HTMLUnknownElement"]('bobo')
|
||
case "FAKE":
|
||
return new bodaEnv.memory.globlProtoObj["HTMLUnknownElement"]('bobo')
|
||
case "SVG":
|
||
return new bodaEnv.memory.globlProtoObj["HTMLUnknownElement"]('bobo')
|
||
case "TD":
|
||
return new bodaEnv.memory.globlProtoObj["HTMLTableCellElement"]('bobo')
|
||
case 'TEXT':
|
||
return new bodaEnv.memory.globlProtoObj["Text"]('bobo')
|
||
case "B":
|
||
return new bodaEnv.memory.globlProtoObj["HTMLElement"]('bobo')
|
||
case "AUDIO":
|
||
return new bodaEnv.memory.globlProtoObj["HTMLAudioElement"]('bobo')
|
||
case "#COMMENT":
|
||
return new bodaEnv.memory.globlProtoObj["Comment"]('bobo')
|
||
case "#TEXT":
|
||
return new bodaEnv.memory.globlProtoObj["Text"]("bobo")
|
||
case "DIV":
|
||
// debugger
|
||
return new bodaEnv.memory.globlProtoObj["HTMLDivElement"]('bobo')
|
||
case "SCRIPT":
|
||
return new bodaEnv.memory.globlProtoObj["HTMLScriptElement"]('bobo')
|
||
case "TITLE":
|
||
return new bodaEnv.memory.globlProtoObj["HTMLTitleElement"]('bobo')
|
||
case "HEAD":
|
||
return new bodaEnv.memory.globlProtoObj["HTMLHeadElement"]('bobo')
|
||
case 'META':
|
||
return new bodaEnv.memory.globlProtoObj["HTMLMetaElement"]('bobo')
|
||
case 'LINK':
|
||
return new bodaEnv.memory.globlProtoObj["HTMLLinkElement"]('bobo')
|
||
case "A":
|
||
return new bodaEnv.memory.globlProtoObj["HTMLAnchorElement"]('bobo')
|
||
case "SPAN":
|
||
return new bodaEnv.memory.globlProtoObj["HTMLSpanElement"]('bobo')
|
||
case "P":
|
||
return new bodaEnv.memory.globlProtoObj["HTMLParagraphElement"]('bobo')
|
||
case "LI":
|
||
return new bodaEnv.memory.globlProtoObj["HTMLLIElement"]('bobo')
|
||
case "UL":
|
||
return new bodaEnv.memory.globlProtoObj["HTMLUListElement"]('bobo')
|
||
case 'IFRAME':
|
||
|
||
|
||
return new bodaEnv.memory.globlProtoObj["HTMLIFrameElement"]('bobo')
|
||
case 'IMG':
|
||
return new bodaEnv.memory.globlProtoObj["HTMLImageElement"]('bobo')
|
||
case "H1":
|
||
return new bodaEnv.memory.globlProtoObj["HTMLHeadingElement"]('bobo')
|
||
case "H4":
|
||
return new bodaEnv.memory.globlProtoObj["HTMLHeadingElement"]('bobo')
|
||
case "H2":
|
||
return new bodaEnv.memory.globlProtoObj["HTMLHeadingElement"]('bobo')
|
||
case "NOSCRIPT":
|
||
return new bodaEnv.memory.globlProtoObj["HTMLElement"]('bobo')
|
||
case 'INPUT':
|
||
return new bodaEnv.memory.globlProtoObj["HTMLInputElement"]('bobo')
|
||
case 'FORM':
|
||
return new bodaEnv.memory.globlProtoObj["HTMLFormElement"]('bobo')
|
||
case 'STYLE':
|
||
return new bodaEnv.memory.globlProtoObj["HTMLStyleElement"]('bobo')
|
||
case 'VIDEO':
|
||
return new bodaEnv.memory.globlProtoObj["HTMLVideoElement"]('bobo')
|
||
case 'BODY':
|
||
return new bodaEnv.memory.globlProtoObj["HTMLBodyElement"]('bobo')
|
||
case 'HTML':
|
||
return new bodaEnv.memory.globlProtoObj["HTMLHtmlElement"]('bobo')
|
||
case "CANVAS":
|
||
return new bodaEnv.memory.globlProtoObj["HTMLCanvasElement"]('bobo')
|
||
case "SECTION":
|
||
return new bodaEnv.memory.globlProtoObj["HTMLElement"]('bobo')
|
||
case "I":
|
||
return new bodaEnv.memory.globlProtoObj["HTMLElement"]('bobo')
|
||
case "FONT":
|
||
return new bodaEnv.memory.globlProtoObj["HTMLFontElement"]('bobo')
|
||
case "EM":
|
||
return new bodaEnv.memory.globlProtoObj["HTMLElement"]('bobo')
|
||
case "H6":
|
||
return new bodaEnv.memory.globlProtoObj["HTMLHeadingElement"]('bobo')
|
||
case "OPTION":
|
||
return new bodaEnv.memory.globlProtoObj["HTMLOptionElement"]('bobo')
|
||
case "SELECT":
|
||
return new bodaEnv.memory.globlProtoObj["HTMLSelectElement"]('bobo')
|
||
case "BR":
|
||
return new bodaEnv.memory.globlProtoObj["HTMLBRElement"]('bobo')
|
||
case "CLOB":
|
||
return new bodaEnv.memory.globlProtoObj["HTMLUnknownElement"]('bobo')
|
||
case "MARQUEE":
|
||
return new bodaEnv.memory.globlProtoObj["HTMLMarqueeElement"]('bobo')
|
||
case "STRONG":
|
||
return new bodaEnv.memory.globlProtoObj["HTMLElement"]('bobo')
|
||
case "BUTTON":
|
||
return new bodaEnv.memory.globlProtoObj["HTMLButtonElement"]('bobo')
|
||
case 'LEGEND':
|
||
return new bodaEnv.memory.globlProtoObj["HTMLLegendElement"]('bobo')
|
||
case 'OPTGROUP':
|
||
return new bodaEnv.memory.globlProtoObj["HTMLOptGroupElement"]('bobo')
|
||
case "FIELDSET":
|
||
return new bodaEnv.memory.globlProtoObj["HTMLFieldSetElement"]('bobo')
|
||
case 'SUP':
|
||
return new bodaEnv.memory.globlProtoObj["HTMLElement"]('bobo')
|
||
case "H3":
|
||
return new bodaEnv.memory.globlProtoObj["HTMLHeadingElement"]('bobo')
|
||
case "ADDRESS":
|
||
return new bodaEnv.memory.globlProtoObj["HTMLElement"]('bobo')
|
||
case "LABEL":
|
||
return new bodaEnv.memory.globlProtoObj["HTMLLabelElement"]('bobo')
|
||
default:
|
||
debugger
|
||
bodaEnv.toolsFunc.console_copy(`setProto属性${tagpro}未实现`)
|
||
break;
|
||
}
|
||
}
|
||
bodaEnv.toolsFunc.filterProxyProp = function filterProxyProp(prop) {
|
||
for (let i = 0; i < bodaEnv.memory.filterProxyProp.length; i++) {
|
||
if (bodaEnv.memory.filterProxyProp[i] === prop) {
|
||
return true;
|
||
}
|
||
}
|
||
return false
|
||
}
|
||
bodaEnv.toolsFunc.proxyHTMLCollection=function(obj,objName){
|
||
//这个方法的proxy为必要,不能关闭
|
||
let handler = {
|
||
get(target, prop, receiver) {
|
||
// let
|
||
let result;
|
||
let targetNode=bodaEnv.toolsFunc.getObjWeakMapProtoAttr.call(target)
|
||
let targetWeakMapAttr=targetNode['HTMLCollection']
|
||
if (typeof targetWeakMapAttr=='function'){
|
||
targetWeakMapAttr=targetWeakMapAttr().cache
|
||
}
|
||
// debugger
|
||
for (let ind=0; ind <targetWeakMapAttr.length;ind++){
|
||
// debugger
|
||
if (!target[ind]){
|
||
bodaEnv.toolsFunc.defineProperty_bo(target,ind,{
|
||
writable:false,
|
||
configurable:true,
|
||
enumerable:true,
|
||
value:bodaEnv.memory.WeakMap.get(targetWeakMapAttr[ind])
|
||
})
|
||
}
|
||
if (targetWeakMapAttr[ind].id && !(target[targetWeakMapAttr[ind].id])){
|
||
bodaEnv.toolsFunc.defineProperty_bo(target,targetWeakMapAttr[ind].id,{
|
||
writable:false,
|
||
configurable:true,
|
||
enumerable:false,
|
||
value:bodaEnv.memory.WeakMap.get(targetWeakMapAttr[ind])
|
||
})
|
||
|
||
}
|
||
}
|
||
|
||
if (prop =='length'){
|
||
result=targetWeakMapAttr?targetWeakMapAttr.length:'result 存在问题!!!!!!'
|
||
bodaEnv.toolsFunc.console_copy(' [' + objName + ']', ' 获取属性: ', prop, ' value: ', result,);
|
||
return result
|
||
}
|
||
if ( (typeof prop != 'symbol') && (Number(prop)>=0)){
|
||
// debugger
|
||
result=bodaEnv.memory.WeakMap.get(targetWeakMapAttr[prop])
|
||
bodaEnv.toolsFunc.console_copy(' [' + objName + ']', ' 获取属性: ', prop, ' value: ', result,);
|
||
return result
|
||
}
|
||
// if ((typeof prop =='string') && (!bodaEnv.toolsFunc.filterProxyProp(prop))){
|
||
// for(let _ele of targetWeakMapAttr){
|
||
// if (prop == _ele.id){
|
||
// result=bodaEnv.memory.WeakMap.get(_ele)
|
||
// bodaEnv.toolsFunc.console_copy(' [' + objName + ']', ' 获取属性: ', prop, ' value: ', result,);
|
||
// return result
|
||
// }
|
||
|
||
// }
|
||
// }
|
||
|
||
result = Reflect.get(target, prop, receiver)
|
||
|
||
if (bodaEnv.toolsFunc.filterProxyProp(prop)) {
|
||
return result;
|
||
}
|
||
bodaEnv.toolsFunc.console_copy(' [' + objName + ']', ' 获取属性: ', prop, ' value: ', result,);
|
||
return result;
|
||
},
|
||
set(target, propKey, value, receiver) {
|
||
bodaEnv.toolsFunc.console_copy(' [' + objName + ']', " 设置属性: ", propKey, " value: ", value);
|
||
let res = Reflect.set(target, propKey, value, receiver);
|
||
return res
|
||
},
|
||
// has(target, prop) {
|
||
// bodaEnv.toolsFunc.console_copy('['+objName+']',`-> has -> 正在判断对象是否具有属性${prop}`);
|
||
// return Reflect.has(target, prop);
|
||
// },
|
||
deleteProperty(target, prop) {
|
||
// debugger
|
||
if (Number(prop)>=0){
|
||
bodaEnv.toolsFunc.console_copy(' [' + objName + ']', `-> deleteProperty -> 正在删除属性${prop} 结果为-> [false]`);
|
||
return false
|
||
}
|
||
let result=null
|
||
// let isbo=''
|
||
// if (prop.startsWith('bo')){
|
||
// isbo=prop.slice(2)
|
||
// }
|
||
// if (isbo){
|
||
// result=Reflect.deleteProperty(target, isbo);
|
||
|
||
// }else{
|
||
result=Reflect.deleteProperty(target, prop);
|
||
bodaEnv.toolsFunc.console_copy(' [' + objName + ']', `-> deleteProperty -> 正在删除属性${prop} 结果为 ->`,[result]);
|
||
|
||
// }
|
||
|
||
|
||
return result
|
||
},
|
||
ownKeys(target) {
|
||
bodaEnv.toolsFunc.console_copy('[' + objName + ']', ' ->ownKeys 或者getOwnPropertyDescriptors -> 正在获取对象的所有属性 可能存在检测,需要处理一下!!!!->', target);
|
||
return Reflect.ownKeys(target);
|
||
},
|
||
|
||
getOwnPropertyDescriptor(target, prop) {
|
||
bodaEnv.toolsFunc.console_copy('['+objName+']',`正在获取属性${prop}的描述符`);
|
||
return Reflect.getOwnPropertyDescriptor(target, prop);
|
||
},
|
||
defineProperty(target, prop, descriptor) {
|
||
// debugger
|
||
if (Number(prop)>=0){
|
||
return bodaEnv.toolsFunc.throwError('TypeError',`Failed to set an indexed property on 'HTMLCollection': Index property setter is not supported.`)
|
||
}
|
||
let isbo=''
|
||
if (prop.startsWith('bo')){
|
||
isbo=prop.slice(2)
|
||
}
|
||
if (isbo){
|
||
result=Reflect.defineProperty(target, isbo,descriptor);
|
||
|
||
}else{
|
||
result=Reflect.defineProperty(target, prop,descriptor);
|
||
bodaEnv.toolsFunc.console_copy(' ['+objName+']',`-> defineProperty -> 正在定义属性${prop} -> res->`,result);
|
||
|
||
}
|
||
return result
|
||
},
|
||
// preventExtensions(target) {
|
||
// bodaEnv.toolsFunc.console_copy('[' + objName + ']', '-> preventExtensions -> 正在禁止对象扩展');
|
||
// return Reflect.preventExtensions(target);
|
||
// },
|
||
// getPrototypeOf(target) {
|
||
// // debugger
|
||
// bodaEnv.toolsFunc.console_copy('['+objName+']','正在获取对象的原型');
|
||
// return Reflect.getPrototypeOf(target);
|
||
// },
|
||
// setPrototypeOf(target, proto) {
|
||
// bodaEnv.toolsFunc.console_copy('[' + objName + ']', '正在设置对象的原型');
|
||
// return Reflect.setPrototypeOf(target, proto);
|
||
// },
|
||
// apply(target, thisArg, argArray) {
|
||
// // debugger
|
||
// bodaEnv.toolsFunc.console_copy(' [' + objName + ']', '正在调用函数apply ->',`this 为 ->`,bodaEnv.toolsFunc.stringify_bo(thisArg),` -> arg 为 ->`,bodaEnv.toolsFunc.stringify_bo(argArray));
|
||
// return Reflect.apply(target, thisArg, argArray);
|
||
// },
|
||
// construct(target, argArray, newTarget) {
|
||
// bodaEnv.toolsFunc.console_copy(' [' + objName + ']', '正在创建对象实例construct -> argArray ->',bodaEnv.toolsFunc.stringify_bo(argArray),` -> newTarget ->`,newTarget);
|
||
// let resConstruct=Reflect.construct(target, argArray, newTarget);
|
||
// resConstruct=bodaEnv.toolsFunc.proxyHelper(resConstruct,'proxyHelper::'+resConstruct)
|
||
// return resConstruct
|
||
// // return {}
|
||
// }
|
||
};
|
||
// debugger
|
||
let proxyObj = new Proxy(obj, handler);
|
||
|
||
return proxyObj;
|
||
|
||
}
|
||
bodaEnv.toolsFunc.proxyHelper=function (obj, objName) {
|
||
//这个方法的proxy为必要,不能关闭
|
||
let handler = {
|
||
get(target, prop, receiver) {
|
||
// let
|
||
// if (prop=='getContext'){debugger}
|
||
let result = Reflect.get(target, prop, receiver)
|
||
// if(prop =='top:1px')debugger
|
||
if (bodaEnv.toolsFunc.filterProxyProp(prop)) {
|
||
return result;
|
||
}
|
||
bodaEnv.toolsFunc.console_copy(' [' + objName + ']', ' 获取属性: ', prop, ' value: ', result,);
|
||
return result;
|
||
},
|
||
set(target, propKey, value, receiver) {
|
||
// debugger
|
||
// if(value =='top:1px')debugger
|
||
|
||
// if (target instanceof CSSStyleDeclaration){
|
||
// let val=`${propKey}: ${value};`
|
||
// let newVal=''
|
||
// let thisNode=bodaEnv.memory.WeakMap.get(receiver)
|
||
// if (!receiver.hasOwnProperty(propKey,'boboflag')){
|
||
// bodaEnv.toolsFunc.console_copy(`bodaEnv.toolsFunc.proxyHelper proxy2中代理的CSSStyleDeclaration添加的属性非自身属性!!!`)
|
||
// }else{
|
||
// let _isliveStyle=thisNode.getAttribute('style')
|
||
// if (_isliveStyle){
|
||
// // debugger
|
||
// let _styleobjProxy2={}
|
||
// let _SpisliveStyle_list=_isliveStyle.split(';')
|
||
// for (let _v of _SpisliveStyle_list){
|
||
// if (!_v.length) continue
|
||
// let _proxy2Vlist=_v.split(':')
|
||
// _styleobjProxy2[_proxy2Vlist[0].trim()]=_proxy2Vlist[1].trim()
|
||
// }
|
||
// _styleobjProxy2[propKey]=value
|
||
// if (_styleobjProxy2['font-family'] && _styleobjProxy2['fontFamily']){
|
||
// _styleobjProxy2['font-family']=_styleobjProxy2['fontFamily']
|
||
// }
|
||
// for (let key in _styleobjProxy2){
|
||
// newVal=newVal+`${key}: ${_styleobjProxy2[key]};`
|
||
// }
|
||
// }else{
|
||
// newVal=val
|
||
// }
|
||
// thisNode.setAttribute('style',newVal)
|
||
// }
|
||
// debugger
|
||
// let newStyle=isliveStyle+val
|
||
// boda$(thisNode).attr('style',newStyle)
|
||
// }
|
||
bodaEnv.toolsFunc.console_copy(' [' + objName + ']', " 设置属性: ", propKey, " value: ", value);
|
||
let res = Reflect.set(target, propKey, value, receiver);
|
||
return res
|
||
},
|
||
// has(target, prop) {
|
||
// bodaEnv.toolsFunc.console_copy('['+objName+']',`-> has -> 正在判断对象是否具有属性${prop}`);
|
||
// return Reflect.has(target, prop);
|
||
// },
|
||
// deleteProperty(target, prop) {
|
||
// // debugger
|
||
// if (Number(prop)>=0){
|
||
// bodaEnv.toolsFunc.console_copy(' [' + objName + ']', `-> deleteProperty -> 正在删除属性${prop} 结果为-> [false]`);
|
||
// return false
|
||
// }
|
||
// let result=null
|
||
// let isbo=''
|
||
// if (prop.startsWith('bo')){
|
||
// isbo=prop.slice(2)
|
||
// }
|
||
// if (isbo){
|
||
// result=Reflect.deleteProperty(target, isbo);
|
||
|
||
// }else{
|
||
// result=Reflect.deleteProperty(target, prop);
|
||
// bodaEnv.toolsFunc.console_copy(' [' + objName + ']', `-> deleteProperty -> 正在删除属性${prop} 结果为 ->`,[result]);
|
||
|
||
// }
|
||
|
||
|
||
// return result
|
||
// },
|
||
// ownKeys(target) {
|
||
// // if (target._boContentWindow){
|
||
// // let resKeys=Reflect.ownKeys(target)
|
||
// // // debugger
|
||
// // bodaEnv.toolsFunc.console_copy('['+objName+']',' ->ownKeys -> contentWindow_keys 正在获取对象的所有属性 ->',target,`-> res ->`,resKeys );
|
||
// // return resKeys
|
||
// // }
|
||
// bodaEnv.toolsFunc.console_copy('[' + objName + ']', ' ->ownKeys -> 正在获取对象的所有属性 ->', target);
|
||
// return Reflect.ownKeys(target);
|
||
// },
|
||
// getOwnPropertyDescriptor(target, prop) {
|
||
// // debugger
|
||
// bodaEnv.toolsFunc.console_copy('['+objName+']',`正在获取属性${prop}的描述符`);
|
||
// return Reflect.getOwnPropertyDescriptor(target, prop);
|
||
// // },
|
||
// defineProperty(target, prop, descriptor) {
|
||
// // debugger
|
||
// if (Number(prop)>=0){
|
||
// return bodaEnv.toolsFunc.throwError('TypeError',`Failed to set an indexed property on 'HTMLCollection': Index property setter is not supported.`)
|
||
// }
|
||
// let isbo=''
|
||
// if (prop.startsWith('bo')){
|
||
// isbo=prop.slice(2)
|
||
// }
|
||
// if (isbo){
|
||
// result=Reflect.defineProperty(target, isbo,descriptor);
|
||
|
||
// }else{
|
||
// result=Reflect.defineProperty(target, prop,descriptor);
|
||
// bodaEnv.toolsFunc.console_copy(' ['+objName+']',`-> defineProperty -> 正在定义属性${prop} -> res->`,result);
|
||
|
||
// }
|
||
// return result
|
||
// },
|
||
// preventExtensions(target) {
|
||
// bodaEnv.toolsFunc.console_copy('[' + objName + ']', '-> preventExtensions -> 正在禁止对象扩展');
|
||
// return Reflect.preventExtensions(target);
|
||
// },
|
||
// getPrototypeOf(target) {
|
||
// debugger
|
||
// bodaEnv.toolsFunc.console_copy('['+objName+']','正在获取对象的原型');
|
||
// return Reflect.getPrototypeOf(target);
|
||
// },
|
||
// setPrototypeOf(target, proto) {
|
||
// bodaEnv.toolsFunc.console_copy('[' + objName + ']', '正在设置对象的原型');
|
||
// return Reflect.setPrototypeOf(target, proto);
|
||
// },
|
||
apply(target, thisArg, argArray) {
|
||
// debugger
|
||
bodaEnv.toolsFunc.console_copy(' [' + objName + ']', '正在调用函数apply ->',`this 为 ->`,bodaEnv.toolsFunc.stringify_bo(thisArg),` -> arg 为 ->`,bodaEnv.toolsFunc.stringify_bo(argArray));
|
||
return Reflect.apply(target, thisArg, argArray);
|
||
},
|
||
construct(target, argArray, newTarget) {
|
||
bodaEnv.toolsFunc.console_copy(' [' + objName + ']', '正在创建对象实例construct -> argArray ->',bodaEnv.toolsFunc.stringify_bo(argArray),` -> newTarget ->`,newTarget);
|
||
// return new Promise222(argArray)
|
||
// let result=new target(...argArray)
|
||
// debugger
|
||
// result.buffer=tempBuf
|
||
// debugger
|
||
let resConstruct=Reflect.construct(target, argArray, newTarget);
|
||
resConstruct=bodaEnv.toolsFunc.proxyHelper(resConstruct,'proxyHelper::'+resConstruct)
|
||
return resConstruct
|
||
// return {}
|
||
}
|
||
};
|
||
// debugger
|
||
let proxyObj = new Proxy(obj, handler);
|
||
// Object.defineProperty(obj, bodaEnv.memory.symbolProxy, {
|
||
// configurable:false,
|
||
// enumerable:false,
|
||
// writable:false,
|
||
// value:proxyObj
|
||
// },'bobo');
|
||
return proxyObj;
|
||
}
|
||
bodaEnv.toolsFunc.proxyPlugin=function (obj, objName) {
|
||
//这个方法的proxy为必要,不能关闭
|
||
let handler = {
|
||
get(target, prop, receiver) {
|
||
// let
|
||
|
||
// if (prop=='getContext'){debugger}
|
||
let result = Reflect.get(target, prop, receiver)
|
||
if (bodaEnv.toolsFunc.filterProxyProp(prop)) {
|
||
return result;
|
||
}
|
||
// bodaEnv.toolsFunc.setObjWeakMapProtoAttr.call(result,prop,target)
|
||
// debugger
|
||
if (typeof result =='object'){
|
||
bodaEnv.memory.WeakMap.set(result,receiver)
|
||
|
||
}
|
||
// if (result instanceof Object) {
|
||
// // bodaEnv.bodaTools.symbolProperty(result)
|
||
|
||
// return bodaEnv.toolsFunc.proxyPlugin(result, `${objName}.${prop.toString()}`)
|
||
// }
|
||
bodaEnv.toolsFunc.console_copy(' [' + objName + ']', ' 获取属性: ', prop, ' value: ', result,);
|
||
return result;
|
||
},
|
||
set(target, propKey, value, receiver) {
|
||
bodaEnv.toolsFunc.console_copy(' [' + objName + ']', " 设置属性: ", propKey, " value: ", value);
|
||
let res = Reflect.set(target, propKey, value, receiver);
|
||
return res
|
||
},
|
||
apply(target, thisArg, argArray) {
|
||
// debugger
|
||
bodaEnv.toolsFunc.console_copy(' [' + objName + ']', '正在调用函数apply ->',`this 为 ->`,bodaEnv.toolsFunc.stringify_bo(thisArg),` -> arg 为 ->`,bodaEnv.toolsFunc.stringify_bo(argArray));
|
||
return Reflect.apply(target, thisArg, argArray);
|
||
},
|
||
construct(target, argArray, newTarget) {
|
||
bodaEnv.toolsFunc.console_copy(' [' + objName + ']', '正在创建对象实例construct -> argArray ->',bodaEnv.toolsFunc.stringify_bo(argArray),` -> newTarget ->`,newTarget);
|
||
// return new Promise222(argArray)
|
||
// let result=new target(...argArray)
|
||
// debugger
|
||
// result.buffer=tempBuf
|
||
// debugger
|
||
return Reflect.construct(target, argArray, newTarget);
|
||
// return {}
|
||
}
|
||
};
|
||
// debugger
|
||
let proxyObj = new Proxy(obj, handler);
|
||
// Object.defineProperty(obj, bodaEnv.memory.symbolProxy, {
|
||
// configurable:false,
|
||
// enumerable:false,
|
||
// writable:false,
|
||
// value:proxyObj
|
||
// },'bobo');
|
||
return proxyObj;
|
||
}
|
||
bodaEnv.toolsFunc.proxy2 = function (obj, objName) {
|
||
if (bodaEnv.config.proxy==false){return obj}
|
||
let handler = {
|
||
get(target, prop, receiver) {
|
||
// let
|
||
|
||
let result = Reflect.get(target, prop, receiver)
|
||
// if (prop=='prepareStackTrace' ){
|
||
// return undefined
|
||
// }
|
||
if (bodaEnv.toolsFunc.filterProxyProp(prop)) {
|
||
return result;
|
||
}
|
||
bodaEnv.toolsFunc.console_copy(' [' + objName + ']', ' 获取属性: ', prop, ' value: ', result,);
|
||
|
||
return result;
|
||
},
|
||
set(target, propKey, value, receiver) {
|
||
// debugger
|
||
bodaEnv.toolsFunc.console_copy(' [' + objName + ']', " 设置属性: ", propKey, " value: ", value);
|
||
|
||
let res = Reflect.set(target, propKey, value, receiver);
|
||
return res
|
||
},
|
||
// has(target, prop) {
|
||
// bodaEnv.toolsFunc.console_copy('['+objName+']',`-> has -> 正在判断对象是否具有属性${prop}`);
|
||
// return Reflect.has(target, prop);
|
||
// },
|
||
deleteProperty(target, prop) {
|
||
bodaEnv.toolsFunc.console_copy(' [' + objName + ']', `-> deleteProperty -> 正在删除属性${prop}`);
|
||
return Reflect.deleteProperty(target, prop);
|
||
},
|
||
// ownKeys(target) {
|
||
// // if (target._boContentWindow){
|
||
// // let resKeys=Reflect.ownKeys(target)
|
||
// // // debugger
|
||
// // bodaEnv.toolsFunc.console_copy('['+objName+']',' ->ownKeys -> contentWindow_keys 正在获取对象的所有属性 ->',target,`-> res ->`,resKeys );
|
||
// // return resKeys
|
||
// // }
|
||
// bodaEnv.toolsFunc.console_copy('[' + objName + ']', ' ->ownKeys -> 正在获取对象的所有属性 ->', target);
|
||
// return Reflect.ownKeys(target);
|
||
// },
|
||
// getOwnPropertyDescriptor(target, prop) {
|
||
// bodaEnv.toolsFunc.console_copy('['+objName+']',`正在获取属性${prop}的描述符`);
|
||
// return Reflect.getOwnPropertyDescriptor(target, prop);
|
||
// },
|
||
// defineProperty(target, prop, descriptor) {
|
||
// bodaEnv.toolsFunc.console_copy('['+objName+']',`-> defineProperty -> 正在定义属性${prop}`);
|
||
// return Reflect.defineProperty(target, prop, descriptor);
|
||
// },
|
||
// preventExtensions(target) {
|
||
// bodaEnv.toolsFunc.console_copy('[' + objName + ']', '-> preventExtensions -> 正在禁止对象扩展');
|
||
// return Reflect.preventExtensions(target);
|
||
// },
|
||
// getPrototypeOf(target) {
|
||
// debugger
|
||
// bodaEnv.toolsFunc.console_copy('['+objName+']','正在获取对象的原型');
|
||
// return Reflect.getPrototypeOf(target);
|
||
// },
|
||
// setPrototypeOf(target, proto) {
|
||
// bodaEnv.toolsFunc.console_copy('[' + objName + ']', '正在设置对象的原型');
|
||
// return Reflect.setPrototypeOf(target, proto);
|
||
// },
|
||
apply(target, thisArg, argArray) {
|
||
bodaEnv.toolsFunc.console_copy(' [' + objName + ']', '正在调用函数');
|
||
return Reflect.apply(target, thisArg, argArray);
|
||
},
|
||
construct(target, argArray, newTarget) {
|
||
bodaEnv.toolsFunc.console_copy(' [' + objName + ']', '正在创建对象实例,',[argArray]);
|
||
// return new Promise222(argArray)
|
||
return Reflect.construct(target, argArray, newTarget);
|
||
// return {}
|
||
}
|
||
};
|
||
// debugger
|
||
let proxyObj = new Proxy(obj, handler);
|
||
// Object.defineProperty(obj, bodaEnv.memory.symbolProxy, {
|
||
// configurable:false,
|
||
// enumerable:false,
|
||
// writable:false,
|
||
// value:proxyObj
|
||
// },'bobo');
|
||
return proxyObj;
|
||
}
|
||
|
||
bodaEnv.toolsFunc.proxyWindow = function (obj, objName) {
|
||
|
||
//实现iframe 不能关闭!!! 不然iframe检测会导致过不去
|
||
//iframe 只实现一部分 太多了,懒得写
|
||
let handler = {
|
||
get(target, prop, receiver) {
|
||
// let _this=
|
||
// debugger
|
||
let result=bodaEnv.toolsFunc.dispatch(receiver, window, "window", prop+`_get`, arguments)
|
||
// let result = Reflect.get(target, prop, receiver)
|
||
// if (prop == 'Object'){return result}
|
||
|
||
// if (bodaEnv.toolsFunc.filterProxyProp(prop)){
|
||
// return result
|
||
// }
|
||
bodaEnv.toolsFunc.console_copy(' [' + objName + ']', ' 获取属性: ', prop, ' value: ', result,);
|
||
|
||
return result;
|
||
},
|
||
set(target, propKey, value, receiver) {
|
||
bodaEnv.toolsFunc.console_copy(' [' + objName + ']', " 设置属性: ", propKey, " value: ", value);
|
||
|
||
let res = Reflect.set(target, propKey, value, receiver);
|
||
// bodaEnv.bodaTools.symbolProperty(res)
|
||
return res
|
||
},
|
||
deleteProperty(target, prop) {
|
||
bodaEnv.toolsFunc.console_copy(' [' + objName + ']', `-> deleteProperty -> 正在删除属性${prop}`);
|
||
return Reflect.deleteProperty(target,prop)
|
||
},
|
||
};
|
||
// debugger
|
||
let proxyObj = new Proxy(obj, handler);
|
||
// Object.defineProperty(obj, bodaEnv.memory.symbolProxy, {
|
||
// configurable:false,
|
||
// enumerable:false,
|
||
// writable:false,
|
||
// value:proxyObj
|
||
// },'bobo');
|
||
return proxyObj;
|
||
}
|
||
bodaEnv.toolsFunc.proxyDocument = function (obj, objName) {
|
||
|
||
//实现iframe 下的document代理 不能关闭!!! 不然iframe检测会导致过不去
|
||
//iframe 只实现一部分 太多了,懒得写
|
||
let handler = {
|
||
get(target, prop, receiver) {
|
||
// let _this=
|
||
// debugger
|
||
// let result=bodaEnv.toolsFunc.dispatch(receiver, document, "Document", prop, arguments)
|
||
let result = Reflect.get(target, prop, receiver)
|
||
// if (prop == 'Object'){return result}
|
||
|
||
// if (bodaEnv.toolsFunc.filterProxyProp(prop)){
|
||
// return result
|
||
// }
|
||
bodaEnv.toolsFunc.console_copy(' [' + objName + ']', ' 获取属性: ', prop, ' value: ', result,);
|
||
|
||
return result;
|
||
},
|
||
set(target, propKey, value, receiver) {
|
||
bodaEnv.toolsFunc.console_copy(' [' + objName + ']', " 设置属性: ", propKey, " value: ", value);
|
||
|
||
let res = Reflect.set(target, propKey, value, receiver);
|
||
// bodaEnv.bodaTools.symbolProperty(res)
|
||
return res
|
||
},
|
||
deleteProperty(target, prop) {
|
||
bodaEnv.toolsFunc.console_copy(' [' + objName + ']', `-> deleteProperty -> 正在删除属性${prop}`);
|
||
return Reflect.deleteProperty(target,prop)
|
||
},
|
||
apply(target, thisArg, argArray) {
|
||
bodaEnv.toolsFunc.console_copy(' [' + objName + ']', '正在调用函数');
|
||
return Reflect.apply(target, thisArg, argArray);
|
||
},
|
||
};
|
||
// debugger
|
||
let proxyObj = new Proxy(obj, handler);
|
||
// Object.defineProperty(obj, bodaEnv.memory.symbolProxy, {
|
||
// configurable:false,
|
||
// enumerable:false,
|
||
// writable:false,
|
||
// value:proxyObj
|
||
// },'bobo');
|
||
return proxyObj;
|
||
}
|
||
|
||
//获取原型对象上自身属性值
|
||
bodaEnv.toolsFunc.getObjWeakMapProtoAttr = function getObjWeakMapProtoAttr(key) {
|
||
let attrData = bodaEnv.memory.ObjWeakMapProtoAttr.get(this);
|
||
if (attrData) {
|
||
if (!key){return attrData}
|
||
return attrData[key];
|
||
}
|
||
}
|
||
|
||
bodaEnv.toolsFunc.setObjWeakMapProtoAttr = function setObjWeakMapProtoAttr(key, value) {
|
||
// 如果当前对象不在weakmap中,则添加它。
|
||
if (!bodaEnv.memory.ObjWeakMapProtoAttr.has(this)) {
|
||
bodaEnv.memory.ObjWeakMapProtoAttr.set(this, {});
|
||
// bodaEnv.memory.allAttrObj.push(this)
|
||
}
|
||
|
||
let attrData = bodaEnv.memory.ObjWeakMapProtoAttr.get(this);
|
||
attrData[key] = value;
|
||
}
|
||
|
||
|
||
// return bodaEnv.toolsFunc.dispatch(this,Document.prototype,"Document","implementation_get",arguments,)
|
||
//env函数分发器
|
||
bodaEnv.toolsFunc.dispatch = function dispatch(self, obj, objName, funcName, argList, defaultValue) {
|
||
//obj Document.prototype
|
||
//obj loction
|
||
|
||
//bodaEnv.toolsFunc.dispatch(this,Document.prototype,"Document","write",arguments)}});
|
||
let name = `${objName}_${funcName}`
|
||
//实现r={} ,r.__proto__=Document.prototype ,r.location 报错
|
||
// debugger
|
||
//实现Document.prototype.activeElement()调用报错
|
||
if (Object.getOwnPropertyDescriptor(obj, "constructor") !== undefined) {
|
||
// if (Object.getOwnPropertyDescriptor(self, "constructor") !== undefined) {
|
||
// return bodaEnv.toolsFunc.throwError("TypeError", "Illegal invocation")
|
||
// }
|
||
if (!(self instanceof obj.constructor)){
|
||
debugger
|
||
bodaEnv.toolsFunc.console_copy('TypeError',` bodaEnv.toolsFunc.dispatch 执行出错`);
|
||
return bodaEnv.toolsFunc.throwError("TypeError", "Illegal invocation")
|
||
}
|
||
}
|
||
try {
|
||
|
||
// if (bodaEnv.config.issymbolProperty){
|
||
// debugger
|
||
// if(bodaEnv.toolsFunc.getObjWeakMapProtoAttr.call(self,'issymbolProperty') ==undefined){
|
||
// debugger
|
||
// bodaEnv.toolsFunc.console_copy(self,` bodaEnv.toolsFunc.dispatch1 执行出错`,funcName);
|
||
// return bodaEnv.toolsFunc.throwError("TypeError", "Illegal invocation")
|
||
|
||
// }
|
||
// debugger
|
||
// if (bodaEnv.memory.initDone){
|
||
// // debugger
|
||
// //实现r={} ;r.__proto__=document ,r.location 报错
|
||
// //未实现var fff={} ;;fff.__proto__=Document.prototype ;fff.anchors
|
||
// if ((self.__proto__.constructor == self.__proto__.__proto__.constructor)
|
||
// // || !bodaEnv.toolsFunc.getObjWeakMapProtoAttr.call(self,'issymbolProperty')
|
||
// ){
|
||
// // debugger
|
||
// bodaEnv.toolsFunc.console_copy(self,` bodaEnv.toolsFunc.dispatch 非法调用 执行出错`,funcName);
|
||
// return bodaEnv.toolsFunc.throwError("TypeError", "Illegal invocation")
|
||
// }
|
||
|
||
// }
|
||
|
||
// }
|
||
// debugger
|
||
////直接导出环境设置
|
||
// if (bodaEnv.config.exportEnv){
|
||
// if (!bodaEnv.config.exportEnvNameList){
|
||
// bodaEnv.config.exportEnvNameList=[] //具体方法名称 document.createElement
|
||
// bodaEnv.config.exportEnvStr=''
|
||
// bodaEnv.config.exportEnvObjNameList=[] //window document等
|
||
// }
|
||
// if (!bodaEnv.config.exportEnvObjNameList.includes(objName)){
|
||
// bodaEnv.config.exportEnvObjNameList.push(objName)
|
||
// }
|
||
// if (!bodaEnv.config.exportEnvNameList.includes(name)){
|
||
|
||
// bodaEnv.config.exportEnvNameList.push(name)
|
||
// bodaEnv.config.exportEnvStr=bodaEnv.config.exportEnvStr+`bodaEnv.envFunc['${name}']=${bodaEnv.envFunc[name]+''}`+'\n\r'
|
||
// }
|
||
// // bodaEnv.config.exportEnvList.push()
|
||
// }
|
||
//可以在这添加逻辑,直接导出所使用的环境!!!!!!!!!!!!!!
|
||
return bodaEnv.envFunc[name].apply(self, argList)
|
||
|
||
|
||
} catch (e) {
|
||
//
|
||
// debugger
|
||
let log__ = `'[${name}]正在执行,错误信息${e.message}'`
|
||
bodaEnv.toolsFunc.console_copy(log__);
|
||
// bodaEnv.toolsFunc.printcopy_log(log__)
|
||
}
|
||
}
|
||
|
||
|
||
//定义对象属性 defineProperty
|
||
bodaEnv.toolsFunc.defineProperty = function defineProperty(obj, prop, OldDescriptior) {
|
||
// if (obj ==window){debugger}
|
||
let newDescriptior = {};
|
||
newDescriptior.configurable = bodaEnv.config.proxy || OldDescriptior.configurable;//如果开启代理必须是true
|
||
newDescriptior.enumerable = OldDescriptior.enumerable;
|
||
if (OldDescriptior.hasOwnProperty("writable", "boboflag")) {
|
||
newDescriptior.writable = bodaEnv.config.proxy || OldDescriptior.writable;//如果开启代理必须是true
|
||
}
|
||
if (OldDescriptior.hasOwnProperty("value", "boboflag")) {
|
||
let value = OldDescriptior.value;
|
||
if (typeof value == "function") {
|
||
bodaEnv.toolsFunc.safeFunc(value, prop)
|
||
}
|
||
newDescriptior.value = value;
|
||
}
|
||
if (OldDescriptior.hasOwnProperty("get", "boboflag")) {
|
||
let get = OldDescriptior.get;
|
||
if (typeof get == "function") {
|
||
bodaEnv.toolsFunc.safeFunc(get, `get ${prop}`)
|
||
}
|
||
newDescriptior.get = get;
|
||
}
|
||
if (OldDescriptior.hasOwnProperty("set", "boboflag")) {
|
||
let set = OldDescriptior.set;
|
||
if (typeof set == "function") {
|
||
bodaEnv.toolsFunc.safeFunc(set, `set ${prop}`)
|
||
}
|
||
newDescriptior.set = set;
|
||
}
|
||
Object.defineProperty(obj, prop, newDescriptior, 'bobo')
|
||
// bodaEnv.toolsFunc.symbolProperty(obj.prop)
|
||
|
||
};
|
||
;;
|
||
|
||
!function(){
|
||
const $toString = Function.prototype.toString;
|
||
const $callTostring = Function.prototype.call.bind($toString);
|
||
const memoryMap = new Map();
|
||
const myToString = function toString(){
|
||
return typeof this === 'function' && memoryMap.get(this) || $callTostring(this);
|
||
}
|
||
Object.defineProperty(Function.prototype, "toString", {enumerable: false, configurable: true, writable: true, value: myToString},'bobo');
|
||
function set_native(obj, value){
|
||
memoryMap.set(obj, value);
|
||
}
|
||
set_native(Function.prototype.toString, "function toString() { [native code] }");
|
||
bodaEnv.toolsFunc.safefunction = function setNative(func, funcname,funcNameNull){
|
||
// debugger
|
||
Object.defineProperty(func,"name",{value: funcname || func.name || '', writable: false, enumerable: false, configurable: true},'bobo');
|
||
// debugger
|
||
//memoryInfo 需要这个实现 set get 方法名为空 funcNameNull
|
||
if (!funcNameNull){
|
||
set_native(func, `function ${funcname || func.name || ''}() { [native code] }`);
|
||
}else{
|
||
set_native(func, `function () { [native code] }`);
|
||
|
||
}
|
||
|
||
}
|
||
}();
|
||
// bodaEnv.toolsFunc.safefunction=function(){}
|
||
|
||
|
||
bodaEnv.toolsFunc.getType=function(type){
|
||
return Object.prototype.toString.call(type)
|
||
}
|
||
|
||
|
||
//对象重命名
|
||
bodaEnv.toolsFunc.reNameObj = function reNameObj(obj, obname) {
|
||
Object.defineProperty(obj.prototype, Symbol.toStringTag, {
|
||
value: obname,
|
||
configurable: true,
|
||
writable: false,
|
||
enumerable: false
|
||
}, 'bobo')
|
||
};
|
||
//函数重命名
|
||
bodaEnv.toolsFunc.reNameFunc = function reNameFunc(func, name) {
|
||
Object.defineProperty(func, "name", {
|
||
value: name,
|
||
configurable: true,
|
||
writable: false,
|
||
enumerable: false
|
||
}, 'bobo')
|
||
}
|
||
//合并 保护方法
|
||
bodaEnv.toolsFunc.safeFunc = function safeFunc(func, name) {
|
||
bodaEnv.toolsFunc.safefunction(func, name)
|
||
bodaEnv.toolsFunc.reNameFunc(func, name)
|
||
}
|
||
//合并 保护原型
|
||
bodaEnv.toolsFunc.safeProto = function safeProto(obj, name) {
|
||
bodaEnv.toolsFunc.safefunction(obj, name)
|
||
bodaEnv.toolsFunc.reNameObj(obj, name)
|
||
//防止 Window.prototype ={} 被修改
|
||
Object.defineProperty(obj,'prototype',{
|
||
value: obj.prototype,
|
||
writable:false,
|
||
enumerable:false,
|
||
configurable:false
|
||
})
|
||
|
||
|
||
}
|
||
|
||
|
||
//抛错
|
||
bodaEnv.toolsFunc.throwError = function throwError(name, message) {
|
||
let e = new Error();
|
||
e.message = message;
|
||
e.name = name;
|
||
if (bodaEnv.memory.currentFile){
|
||
|
||
e.stack = `${name}: ${message}at ${bodaEnv.memory.currentFile}:40:9`
|
||
|
||
}else{
|
||
e.stack = `${name}: ${message}\n at <anonymous>:1:1`
|
||
|
||
}
|
||
bodaEnv.toolsFunc.console_copy('调用bodaEnv.toolsFunc.throwError主动报错::',e.stack)
|
||
throw e
|
||
}
|
||
|
||
|
||
// base64编码解码
|
||
bodaEnv.toolsFunc.base64 = {};
|
||
bodaEnv.toolsFunc.base64.base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
||
bodaEnv.toolsFunc.base64.base64DecodeChars = new Array(-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1, -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1);
|
||
bodaEnv.toolsFunc.base64.base64encode = function base64encode(str) {
|
||
var out, i, len;
|
||
var c1, c2, c3;
|
||
str=str.toString()
|
||
len = str.length;
|
||
i = 0;
|
||
out = "";
|
||
while (i < len) {
|
||
c1 = str.charCodeAt(i++) & 0xff;
|
||
if (i == len) {
|
||
out += bodaEnv.toolsFunc.base64.base64EncodeChars.charAt(c1 >> 2);
|
||
out += bodaEnv.toolsFunc.base64.base64EncodeChars.charAt((c1 & 0x3) << 4);
|
||
out += "==";
|
||
break;
|
||
}
|
||
c2 = str.charCodeAt(i++);
|
||
if (i == len) {
|
||
out += bodaEnv.toolsFunc.base64.base64EncodeChars.charAt(c1 >> 2);
|
||
out += bodaEnv.toolsFunc.base64.base64EncodeChars.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4));
|
||
out += bodaEnv.toolsFunc.base64.base64EncodeChars.charAt((c2 & 0xF) << 2);
|
||
out += "=";
|
||
break;
|
||
}
|
||
c3 = str.charCodeAt(i++);
|
||
out += bodaEnv.toolsFunc.base64.base64EncodeChars.charAt(c1 >> 2);
|
||
out += bodaEnv.toolsFunc.base64.base64EncodeChars.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4));
|
||
out += bodaEnv.toolsFunc.base64.base64EncodeChars.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >> 6));
|
||
out += bodaEnv.toolsFunc.base64.base64EncodeChars.charAt(c3 & 0x3F);
|
||
};
|
||
// debugger
|
||
bodaEnv.toolsFunc.console_copy(`使用bs64编码:${str}`,
|
||
`\r\n编码后${out}`);
|
||
return out;
|
||
}
|
||
bodaEnv.toolsFunc.base64.base64decode = function base64decode(str) {
|
||
var c1, c2, c3, c4;
|
||
var i, len, out;
|
||
|
||
len = str.length;
|
||
i = 0;
|
||
out = "";
|
||
while (i < len) {
|
||
/* c1 */
|
||
do {
|
||
c1 = bodaEnv.toolsFunc.base64.base64DecodeChars[str.charCodeAt(i++) & 0xff];
|
||
} while (i < len && c1 == -1);
|
||
if (c1 == -1)
|
||
break;
|
||
|
||
/* c2 */
|
||
do {
|
||
c2 = bodaEnv.toolsFunc.base64.base64DecodeChars[str.charCodeAt(i++) & 0xff];
|
||
} while (i < len && c2 == -1);
|
||
if (c2 == -1)
|
||
break;
|
||
|
||
out += String.fromCharCode((c1 << 2) | ((c2 & 0x30) >> 4));
|
||
|
||
/* c3 */
|
||
do {
|
||
c3 = str.charCodeAt(i++) & 0xff;
|
||
if (c3 == 61)
|
||
return out;
|
||
c3 = bodaEnv.toolsFunc.base64.base64DecodeChars[c3];
|
||
} while (i < len && c3 == -1);
|
||
if (c3 == -1)
|
||
break;
|
||
|
||
out += String.fromCharCode(((c2 & 0XF) << 4) | ((c3 & 0x3C) >> 2));
|
||
|
||
/* c4 */
|
||
do {
|
||
c4 = str.charCodeAt(i++) & 0xff;
|
||
if (c4 == 61)
|
||
return out;
|
||
c4 = bodaEnv.toolsFunc.base64.base64DecodeChars[c4];
|
||
} while (i < len && c4 == -1);
|
||
if (c4 == -1)
|
||
break;
|
||
out += String.fromCharCode(((c3 & 0x03) << 6) | c4);
|
||
}
|
||
bodaEnv.toolsFunc.console_copy(`
|
||
使用bs64解码前:${str}`,
|
||
`\r\n解码后${out}`);
|
||
|
||
return out;
|
||
}
|
||
}();
|
||
|
||
|
||
// Function.prototype.toString.prototype=bodaEnv.toolsFunc.proxy2(Function.prototype.toString.prototype,'Function.prototype.toString.prototype')
|