文件1:egret_native.d.ts内容如下
declare namespace egret_native {
const enum SensorType {
Accelerometer = 1,
Compass = 2,
DeviceMotion = 3,
Gyroscope = 4,
}
const enum ERuntimeMode {
Browser = 0,
WX = 1,
BrowserWithWXApi = 2,
}
const enum SensorInterval {
// 适用于更新游戏的回调频率,在 20ms/次 左右
game = 1,
// 适用于更新 UI 的回调频率,在 60ms/次 左右
ui = 2,
// 普通的回调频率,在 200ms/次 左右
normal = 3,
}
interface RenderingContextConfig {
/**
* Web+WX: WebGL, Canvas2D
* Boolean that indicates if the canvas contains an alpha buffer.
*/
alpha?: boolean;
/**
* Web+WX: WebGL
* 表示是否抗锯齿
*/
antialias?: boolean;
/**
* WX: WebGL
* 抗锯齿样本数。最小值为 2,最大不超过系统限制数量,仅 iOS 支持
*/
antialiasSamples?: number;
/**
* Web: WebGL
* Boolean that indicates that the drawing buffer has a depth buffer of at least 16 bits.
*/
depth?: boolean;
/**
* Web+WX: WebGL
* 表示是否绘图完成后是否保留绘图缓冲区
*/
preserveDrawingBuffer?: boolean;
/**
* Web: WebGL
* Boolean that indicates that the drawing buffer has a stencil buffer of at least 8 bits.
*/
stencil?: boolean;
}
interface Canvas extends HTMLCanvasElement {
// TODO: remove
nativeDomInit();
onAddToDocument();
// TODO: remove
nativeTypeMarker: ENativeTypeMarker;
// WX API
toTempFilePathSync(param): string;
toTempFilePath(param): void;
}
interface WebGLContext extends WebGLRenderingContext {
// flushCmd(webglBatchLen: number, ctx2dBatchLen: number);
// _flushCmd();
// createBatchObject(type);
// bindCmdBatchBuffer(webglCmdBuffer: ArrayBuffer, ctx2dCmdBuffer: ArrayBuffer);
// maxBatchLen: number;
// arrayBuffer: ArrayBuffer;
// uint32View: Uint32Array;
// float32View: Float32Array;
// uint16View: Uint16Array;
// batchLen: number;
// arrayBuffer2d: ArrayBuffer;
// uint32View2d: Uint32Array;
// float32View2d: Float32Array;
// uint16View2d: Uint16Array;
// batchLen2d: number;
// VERTEX_SHADER: number;
}
interface Canvas2DContext extends CanvasRenderingContext2D {
nativeDrawImage(image, dx: number, dy: number): void;
nativeDrawImage(image, dx: number, dy: number, dWidth: number, dHeight: number): void;
nativeDrawImage(image, sx: number, sy: number, sWidth: number, sHeight: number, dx: number, dy: number, dWidth: number, dHeight: number): void;
nativeDrawCanvas(image: Canvas, dx: number, dy: number): void;
nativeDrawCanvas(image: Canvas, dx: number, dy: number, dWidth: number, dHeight: number): void;
nativeDrawCanvas(image: Canvas, sx: number, sy: number, sWidth: number, sHeight: number, dx: number, dy: number, dWidth: number, dHeight: number): void;
}
class UDPSocket {
bind(port: number): number;
setTTL(ttl: number): void;
connect(addr: string, port: number): void;
send(address: string, port: number, data: String | Uint8Array | ArrayBuffer): void;
write(address: string, port: number, data: String | Uint8Array | ArrayBuffer): void;
close(): void;
}
class KCPSocket {
init(conv: number): void;
bind(port: number): number;
setMtu(mtu: number): void;
setInterval(interval: number): void;
setWndSize(sndwnd: number, rcvwnd: number): void;
setNoDelay(nodelay: number, interval: number, resend: number, nc: number): void;
setStream(stream: number): void;
setTTL(ttl: number): void;
connect(addr: string, port: number): void;
send(data: String | Uint8Array | ArrayBuffer): void;
close(): void;
}
class EgretNative {
// members
global: any;
mode: ERuntimeMode;
nativeConsole: boolean;
nativeGLBatch: boolean;
internal: boolean;
jsinspector: boolean;
jsengine: string; // v8 or jsc
textInput: TextInput;
fs: FileSystem;
// ts members
fontMapping: object;
// TODO: remove this
nativeRenderActive: boolean; // temp
// callbacks
onUncaughtReject: (promise: Promise<any>, reason) => void; // promise
tickPendingReject: () => void; // promise
encodeArgs: (...args) => string; // jsconsole
onError: (err: any) => void;
onPause: () => void;
onResume: () => void;
onTouch: (type: number, ids: Array<number>, xs_array: Array<number>, ys_array: Array<number>) => any;
onResize: (width: number, height: number) => void;
invokeCallback: (msg: string) => void;
launch: (url?: string) => void;
onTick: (timeStamp: number) => boolean;
// configs
getOption(key: string): string | null;
sendInfoToPlugin(arg: string): void;
// javascript engine
require(url: string): any;
requireSource(text: string, url: string): any;
enableConsole(on: boolean): void;
gc(): void;
log(level: number, msg: string): void;
uncaughtPromise(promise: Promise<any>, value: any): void;
// html
onHtmlLoaded(): void;
reload(url: string): void;
// storage
// TODO: storage to object
localStorageGetItemKeyList(): string;
localStorageGetItem(key: string): string;
localStorageSetItem(key: string, value: string): void;
localStorageRemoveItem(key: string): void;
localStorageClear(): void;
sessionStorageGetItem(key: string): string;
sessionStorageSetItem(key: string, value: string): void;
sessionStorageRemoveItem(key: string): void;
sessionStorageClear(): void;
// time/timer
addTimer(callback: any, time: number, loop: boolean): number;
removeTimer(id: number): void;
performanceNow(): number;
// render
setOnUpdate(callback: any): void;
setFrameRate(fps: number): void;
// nativeRender
nrSetCustomFont(name: string, path: string): void;
// canvas
setCanvasStyleTop(value: number);
getCanvasStyleTop(): number;
setCanvasStyleLeft(value: number);
getCanvasStyleLeft(): number;
setCanvasStyleWidth(value: number);
getCanvasStyleWidth(): number;
setCanvasStyleHeight(value: number);
getCanvasStyleHeight(): number;
getWindowInnerWidth(): number;
getWindowInnerHeight(): number;
setCanvasStyleTransform(a, b, c, d, tx, ty): void;
createCanvas(mainCanvas: boolean): egret_native.Canvas;
getContext(canvas: egret_native.Canvas, type: ECanvasContextType, config: ECanvasContextAttributes): any;
createObject(type: ObjectType, cb: object): object;
// device
getDevicePixelRatio(): number;
getUserAgent(): string;
getPlatform(): string;
getSystemInfo(): string;
// utils
btoa_atob(str: string, btoa: boolean): string;
alert(msg: string): void;
sendFpsLog(msg: string, level: number): void;
// resource
loadArchive(path: string): boolean;
loadResource(path: string, promise: any): void;
loadResource(path: string, method: string, headerString: string, requestData: string, binary: boolean, promise: any, timeout: number): number;
loadResourceSync(path: string, method: string, headerString: string, requestData: string, binary: boolean, promise: any, timeout: number): void;
httpRequest(url: string, method: string, headerString: string, requestData: string, binary: boolean, promise: any, timeout: number): number;
abortNetworkTask(taskId: number): void;
readResource(url: string, promise: any, type: EncodingType, async: boolean): void;
saveToFile(download: any, url: string): void;
gameLoadFont(font: string): string;
getTextHeight(font: string, text: string, size: number, bold: boolean, italic: boolean): number;
// device
setKeepScreenOn(on: boolean): void;
getBatteryInfo(promise: any, async: boolean): void;
setClipboardData(value: string): boolean;
getClipboardData(): string;
onNetworkStatusChange(promise: any): void;
getNetworkType(): NetworkType;
setScreenBrightness(value: number): void;
getScreenBrightness(): number;
startSensor(st: SensorType, interval: SensorInterval): void;
stopSensor(st: SensorType): void;
vibrate(duration: number): void;
createObject(ot: ObjectType, cb: object): object;
// class
Node: any;
Text: any;
HTMLElement: any;
HTMLAnchorElement: any;
HTMLCanvasElement: any;
HTMLVideoElement: any;
HTMLInputElement: any;
HTMLTextAreaElement: any;
HTMLScriptElement: any;
CanvasRenderingContext2D: any;
WebGLRenderingContext: any;
WebGLCompressedTexturePVRTC: any;
WebGLCompressedTextureETC1: any;
OES_standard_derivatives: any;
// hacks
// in common/global/canvas.ts
markMainCanvas(canvas): boolean;
// export for nativeRender
NativeRenderSurface: any;
NativeDisplayObject: any;
nrCreateArmatureDisplay: () => any;
}
class TextInput {
show(type: ETextInputType, inputId: number, config: string);
hide();
setText(text: string, color: number);
setBound(config: string);
notify(event: EInputNotify, value: number | string);
// wxnotify(event: EWxInputNotify, value: number | string);
}
const enum ETouchEvents {
Start = 0,
End = 1,
Move = 2,
Cancel = 3,
Click = 4,
}
// end callbacks
function toDataUrl(data, width, height);
class GLBatch {
nativeFlushCmd(buffer: ArrayBuffer, length: number);
nativeCreateBatchObj(number: number);
bindBuffer(ctxId: number, target: number, buffer: any): void;
getActiveAttrib(program: any, index: number): any;
getActiveUniform(program: any, index: number): any;
getAttachedShaders(program: any): any;
getAttribLocation(program: any, name: string): any;
getProgramInfoLog(program: any): any;
getProgramParameter(program: any, pname: any): any;
getShaderInfoLog(shader: any): any;
getShaderParameter(shader, pname): any;
getShaderSource(shader): any;
getUniform(program, location): any;
getUniformLocation(program, name): any;
isBuffer(buffer): any;
isFramebuffer(framebuffer): any;
isProgram(program): any;
isRenderbuffer(renderbuffer): any;
isShader(shader): any;
isTexture(texture): any;
shaderSource(shader, source): void;
getContextBatchId(context: any): number;
_flushCmd();
_switchContext(ctxId: number);
_createObject(webglCtx: any);
_encodeUTF8(str: string);
}
class NativeRenderBuffer {
constructor();
nativeId: number;
}
class DomParser {
static getElementsByTagName(tagName: string): Array<any>;
static querySelector(selector: string): any;
static querySelectorAll(selector: string): any;
static getElementById(elementId: string): any;
static getElementsByName(name: string): any;
static getElementsByClassName(className: string): any;
static write(str: string): void;
static createElement(tagName: string): any;
}
class Image {
onload(): void;
onerror(): void;
loadByBase64(data: string): void;
loadByPath(path: string): void;
imageId: number;
width: number;
height: number;
// attrib not in NativeImage
_container: any;
_src: string;
_emitter: any;
// keep in js
nativeId: number;
}
interface WebSocketCallback {
onOpen();
onMsg(msg: any);
onError();
onClose();
}
class WebSocket {
open(url: string, protocols: string): void;
send(data: any): void;
close(code: any, reason: any): void;
binaryType: string;
}
const enum EncodingType {
String = 0,
ArrayBuffer = 1,
}
class FileSystem {
access(path: string, promise: any, async: boolean): void;
copyFile(srcPath: string, dstPath: string, promise: any, async: boolean): void;
appendFileString(path: string, data: string | String, promise: any, async: boolean): void;
appendFileBin(path: string, data: ArrayBuffer, promise: any, async: boolean): void;
writeFileString(path: string, data: string | String, promise: any, async: boolean): void;
writeFileBin(path: string, data: ArrayBuffer, promise: any, async: boolean): void;
readFile(path: string, promise: any, type: EncodingType, async: boolean): void;
renameFile(srcPath: string, dstPath: string, promise: any, async: boolean): void;
mkdir(path: string, recursive: boolean, promise: any, async: boolean): void;
rmdir(path: string, recursive: boolean, promise: any, async: boolean): void;
readDir(path: string, promise: any, async: boolean): void;
saveFile(srcPath: string, dstPath: string, promise: any, async: boolean): void;
statFile(path: string, recursive: boolean, promise: any, async: boolean): void;
unlink(path: string, promise: any, async: boolean): void;
getSavedFileList(promise: any): void;
removeSavedFile(path: string, promise: any): void;
unzipFile(zipPath: string, targetDir: string, promise: any): void;
downloadFile(url: string, path: string, header: string, promise: any): number;
downloadSubpack(url: string, promise: any): void;
uploadFile(url: string, path: string, name: string, header: string, formData: string, promise: any): number;
loadFileWithSrc(url: string, promise: any, unzip: boolean): void;
toDiskPath(path: string): string;
}
class NativeAudio {
load(path: string): void;
onLoadError(): void;
play(): void;
pause(): void;
stop(): void;
destroy(): void;
onSetTimeCallback(add: boolean): void;
duration: number;
currentTime: number;
volume: number;
autoplay: boolean;
loop: boolean;
paused: boolean;
buffered: number;
}
class NativeVideo {
}
class NativeFilter {
_idx: number;
setFilterData(vshader: string, fshader: string, uniformVals: string): void;
}
class IndexedDB {
static open(name: string, version: any, promise_: object): void;
}
var indexedDB: IndexedDB;
}
文件2:egret_native.ts内容如下
// THIS IS !!NOT!! A MODULE
module.exports = egret_native as unknown as egret_native.EgretNative;
其他文件引用:
const native = require("../../common/global/egret_native");
console.log(native.HTMLCanvasElement);
文件目录:
运行结果及报错内容:
编译成功后,运行结果Uncaught ReferenceError: egret_native is not defined
请问是什么原因导致的呢?集成到原生客户端没有问题,集成到webview不行。