/** * 全局变量 */ enum GL_CAPS { NONE = 0, TEXTURE_COMPRESSION_PVR = 1 << 1, TEXTURE_COMPRESSION_ETC1 = 1 << 2, TEXTURE_COMPRESSION_ETC2 = 1 << 3, TEXTURE_TPG = 1 << 5, INSTANCEING = 1 << 6, } interface ErrorEventHandler { (message: string, filename?: string, lineno?: number, colno?: number, error?:Error): void; } interface LayaBox{ devinfo:{resolution:string,mac:string,imei:string,imsi:string,os:string,osversion:string,phonemodel:string} getDeviceInfo():any; } interface Window extends EventTarget, WindowTimers{ layaHtml5:any; screen:Screen; SetupWebglContext(); downloadfile(url:string, force:boolean, onok:(data:string)=>void, onerr:()=>void); loadLocalStorage(url:string):Storage; XMLHttpRequest:typeof XMLHttpRequest; innerHeight: number; innerWidth: number; outerWidth: number; outerHeight:number; performance:any; localStorage:Storage; sessionStorage:WindowSessionStorage; location:Location; document:Document; Audio:typeof HTMLAudioElement; crypto:Crypto; console:Console; pageXOffset: number; pageYOffset: number; Image:typeof HTMLImageElement; layabox:LayaBox; layaDoc:any; ConchVirtualBitmap:any; //TODO 临时 alert:(message?: any)=> void onerror:(message: string, filename?: string, lineno?: number, colno?: number, error?:Error)=>void; onload: (ev: Event) => any; open(url?: string, target?: string, features?: string, replace?: boolean): Window; onresize: (ev: UIEvent) => any; requestAnimationFrame(callback: FrameRequestCallback): number; cancelAnimationFrame(handle: number): void; process:any; WebSocket:typeof WebSocket; parent: Window; frames: Window; eval(s:any); evalJS(s:any); focus():void; navigator: Navigator; devicePixelRatio: number; getComputedStyle(ele:Element,parm:any):any addEventListener(type: "devicemotion", listener: (ev: DeviceMotionEvent) => any, useCapture?: boolean): void; addEventListener(type: "deviceorientation", listener: (ev: DeviceOrientationEvent) => any, useCapture?: boolean): void; addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void; addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; addEventListener(type: "mousewheel", listener: (ev: MouseWheelEvent) => any, useCapture?: boolean): void; addEventListener(type: "offline", listener: (ev: Event) => any, useCapture?: boolean): void; addEventListener(type: "online", listener: (ev: Event) => any, useCapture?: boolean): void; addEventListener(type: "orientationchange", listener: (ev: Event) => any, useCapture?: boolean): void; addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void; addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; _conchInfo:{version:string}; appcache:AppCache; loadConchUrl:any; postMessage:any; postRuntimeMessage:any; } declare var window:Window; var _window = new _Window(); window.getComputedStyle=function(ele:Element,parm:any):any { return null; } window.pageXOffset=window.pageYOffset=0; window.localStorage = new Storage(); //这时候还没有url。 //window.sessionStorage = new Storage(); 有的项目会使用这个,但是如果没有的话,一般都会再用localStorage,为了避免出错,先不要这个。 window.sessionStorage=new WindowSessionStorage(); var location = window.location = new Location; window.console = new Console(); window.addEventListener = _window.addEventListener.bind(_window); window.removeEventListener = _window.removeEventListener.bind(_window); window.dispatchEvent = _window.dispatchEvent.bind(_window); window.document = new Document(); //是不是应该在sethref之后呢 window.layaDoc = window.document; window.crypto = new Crypto(); window.devicePixelRatio=1.0; var Image = window.Image = HTMLImageElement; var Audio = window.Audio = HTMLAudioElement; window.requestAnimationFrame = requestAnimationFrame; window.cancelAnimationFrame = cancelAnimationFrame; var parent = window.parent = window; var frames = window.frames = null; var navigator = window.navigator = new Navigator(); window.open=(url?: string, target?: string, features?: string, replace?: boolean):Window=>{ createProcess('scripts/index.js',url); return window; } var onload = window.onload = null; function printstack(){ var e = new Error(); alert((e).stack); } var div = HTMLDivElement; window.layabox={ devinfo:(function getDevInfo() { var devi = conchConfig.getDeviceInfo(); window.console.log(devi); return JSON.parse(devi); })(), getDeviceInfo:function(){return this.devinfo;} }; window.layaHtml5={File:File}; var _$innerWidth=getInnerWidth(); var _$innerHeight=getInnerHeight(); var _$devicePixelRatio=getDevicePixelRatio(); Object.defineProperty(window,'innerWidth',{get:function(){return _$innerWidth}}); Object.defineProperty(window,'innerHeight',{get:function(){return _$innerHeight}}); Object.defineProperty(window,'outerWidth',{get:function(){return _$innerWidth}}); Object.defineProperty(window,'outerHeight',{get:function(){return _$innerHeight}}); Object.defineProperty(window,'devicePixelRatio',{get:function(){return _$devicePixelRatio}}); /*conch.setOnBlur && conch.setOnBlur(function(){ var evt = new UIEvent('blur'); evt.view=window; document._dispatchEvent(evt); window.dispatchEvent(evt); }); conch.setOnFocus && conch.setOnFocus(function(){ var evt = new UIEvent('focus'); evt.view=window; document._dispatchEvent(evt); window.dispatchEvent(evt); });*/ conch.setOnResize(function(w,h){ _$innerWidth=w; _$innerHeight=h; window.console.log(">>>>>>>>>>>>>>>>innerWidth:"+_$innerWidth+"innerHeight:"+_$innerHeight); var evt = new UIEvent('resize'); evt.view=window; //evt.eventPhase=Event.AT_TARGET; //TODO 还不好使,需要最终能调用到window.onresize document._dispatchEvent(evt); //需要完整流程 window.dispatchEvent(evt); //TODO //window.onresize&&window.onresize(null); }); conch.config=conchConfig; class Screen{ get width():number{ return _$innerWidth; } get height():number{ return _$innerHeight; } } window.screen=new Screen(); window.onresize=function(e:UIEvent){ //alert('kkkkk') } conch.onerror = function (message, filename, lineno, colno, error) { if (window.onerror) { var ln=decodeTemp(lineno); var cn=decodeTemp(colno); var er=decodeTemp(error); var mg=decodeTemp(message); var fn=decodeTemp(filename); var e={ message:decodeTemp(message), stack:er, name:"" }; window.onerror(mg=="undefined"?undefined:mg,fn=="undefined"?undefined:fn,ln!="undefined"?parseInt(ln):undefined,cn!="undefined"?parseInt(cn):undefined,e); } }; /** * 全局错误处理 */ Object.defineProperty(window,'onerror',{set:function(fun){ conch.__onerror=fun; showAlertOnJsException(false); },get:function(){ return conch.__onerror; }}); /*window.onerror = function(message: string, filename?: string, lineno?: number, colno?: number, error?:Error): void{ alert('window.onerror'); }*/ //var console = window.console; var document = window.document; /** * 全局函数 */ interface FrameRequestCallback { (time: number): void; } var addEventListener:(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean)=>void=window.addEventListener.bind(this); var dispatchEvent:(evt: Event)=>boolean=window.dispatchEvent.bind(this); var removeEventListener:(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean)=>void=window.removeEventListener.bind(this); var clearInterval:(handle: number)=>void=window.clearInterval = _window.clearInterval; var clearTimeout:(handle: number)=>void=window.clearTimeout= _window.clearTimeout; var setInterval:(handler: any, timeout?: any/*, ...args: any[]*/)=>number=window.setInterval=_window.setInterval; var setTimeout:(handler: any, timeout?: any/*, ...args: any[]*/)=>number=window.setTimeout=_window.setTimeout; //onload Object.defineProperty(window,'runtime',{get:function(){return true}});//给window.runtime赋值 window.postMessage=function(data,d) { if(typeof(data)=="object") data=JSON.stringify(data); conch.callWebviewJS( "window.__getMessemage",encodeURIComponent(data),"" ); } window.postRuntimeMessage=function(d) { if(typeof(d)=="object") d=JSON.stringify(d); d=decodeURIComponent(d); var e=new MessageEvent('message'); e.data=JSON.parse(d); e.target=window; var s=new RegExp("(http|file|https)://([^/:]*)(:(\\d+)|)([^?]+)(.*|)"); var rs=s.exec(document.referrer); if(rs){ e.origin=rs[1]+"://"+rs[2]+rs[3]; } window.dispatchEvent(e); } //为了兼容性而保留的 window.SetupWebglContext = function(){}; //document.createElement("canvas").getContext("conch"); window.downloadfile = function (url, force, onok, onerr) { //url = encodeURI(url); if (force) { url = (function (url) { var ret = url; if (url.indexOf('?') < 0) { ret = url + '?rnd=' + Math.random(); } else { ret = url + '&downloadrnd' + Math.random().toString().substr(2) + '=1'; } return ret; })(url); } var file =new window.layaHtml5.File(url); var filereader:any = new FileReader(); filereader.onload = function () { onok && onok(filereader.result); }; filereader.onerror = function () { onerr && onerr(); }; filereader.readAsText(file); }; if(window.navigator.platform!="windows")window["ontouchstart"]=null; window['GL_CAPS'] = GL_CAPS; window.focus=function() {} //根据内存设置大图合集参数 var nMem=conchConfig.getTotalMem();//单位是KB if( nMem <= 524288 ) { //设置引擎的大图集的个数 conchConfig.atlasNum=10; //贴图资源的cache的大小。单位是byte conchConfig.maxTextureMemSize=64*1024*1024; } else if( nMem > 524288 && nMem <= 1048576 ) { //设置引擎的大图集的个数 conchConfig.atlasNum=16; //贴图资源的cache的大小。单位是byte conchConfig.maxTextureMemSize=84*1024*1024; } else if( nMem > 1048576 ) { //设置引擎的大图集的个数 conchConfig.atlasNum=20; //贴图资源的cache的大小。单位是byte conchConfig.maxTextureMemSize=128*1024*1024; } class Performance{ now(){ return tmGetCurms(); } } window["Performance"] = Performance; window.performance = new Performance();