import NativeClass from "./NativeClass"; const { ccclass, property } = cc._decorator; @ccclass export default class Manager extends cc.Component { //#region 外調參數 @property({ type: cc.WebView }) public webview: cc.WebView = null; @property({ type: cc.Node }) public BG: cc.Node = null; //#endregion //#region private // private _text_to_Speech: Text_to_Speech; //#endregion //#region Lifecycle protected onLoad(): void { if (CC_DEBUG) { console.log("Debug"); } new NativeClass(); let self: this = this; // this._text_to_Speech = new Text_to_Speech(); let href: string = window.location.href; // let url: string = `http://220.134.195.1/public/bonus_casino/html5/jianmiau/Test/?host=${href}&v=${Date.now()}`; // let url: string = `https://karolchang.github.io/jm-expense-vue-ts/?host=${href}&ignore=${Date.now()}`; // let url: string = `http://karol.jianmiau.cf/jm-expense-vue-ts/?v=${Date.now()}`; let url: string = `https://jm-expense-2022.firebaseapp.com/login?host=${href}&v=${Date.now()}`; this.webview.url = url; this.webview.node.active = true; cc.view.setResizeCallback(this._resize.bind(this)); this._resize(); const FCMToken: string = NativeClass.Instance.GetFCMToken(); console.log(`FCMToken ${FCMToken}`); // Set EventListener window.addEventListener("message", function (e: MessageEvent): void { let data: any = e.data; let method: string = data.method; let value: any = data.value; if (method) { self.Birdge(method, ...value); } }, false); if (!window["Bridge"]) { window["Bridge"] = function (method: string = "", value: string = ""): void { self.Birdge(method, value); }; } let scheme: string = "jmka"; this.webview.setJavascriptInterfaceScheme(scheme); this.webview.setOnJSCallback((sender: any, url: any) => { let data: JSON = JSON.parse(decodeURI(url.split(`${scheme}://`)[1])); let method: any = data["method"]; let value: any = data["value"]; if (method) { self.Birdge(method, ...value); } }); } /** 跨版本溝通 * @example * CallParent('Speak', '我愛豬涵') */ public Birdge(method: string, value: string = ""): void { let self: this = this; if (method && self[method]) { if (value) { self[method](value); return; } else if (self[method]) { self[method](); return; } } console.log(`not function: ${method}, value: ${value}`); } public CloseBG(): void { this.BG.destroy(); } public Log(msg: string): void { console.log(msg); } public Speak(msg: string): void { // this._text_to_Speech.speak(msg); NativeClass.Instance.TTS_Play(msg); } public Alert(msg: string): void { alert(msg); } private _resize(): void { let Canvas: cc.Canvas = cc.Canvas.instance; let rect: DOMRect = cc.game.canvas.getBoundingClientRect(); /** 判断是否是横屏 */ let landscape: boolean = false; if (rect.width > rect.height) { landscape = true; } // 根据横竖屏调整节点的位置适配等 let frameSize: cc.Size = cc.view.getFrameSize(); if (landscape) { // 横屏 cc.view.setOrientation(cc.macro.ORIENTATION_LANDSCAPE); if (frameSize.height > frameSize.width) { cc.view.setFrameSize(frameSize.height, frameSize.width); } Canvas.designResolution = cc.size(1920, 1080); } else { // 竖屏 cc.view.setOrientation(cc.macro.ORIENTATION_PORTRAIT); if (frameSize.width > frameSize.height) { cc.view.setFrameSize(frameSize.height, frameSize.width); } Canvas.designResolution = cc.size(1080, 1920); } } //#endregion }