1. 程式人生 > >Cocos2d-js Android手機上微信內建瀏覽器黑屏解決方法

Cocos2d-js Android手機上微信內建瀏覽器黑屏解決方法

1、在Cocos2d-js開發過程中 通常會遇到很多問題。本次解決在安卓手機上的微信內建瀏覽器黑屏問題。

2、微信的內建瀏覽器和其它專業的瀏覽器不同。微信內建瀏覽器用x5核心。在一些方面比其它專業的瀏覽器比較落後,所以經常會遇到

卡頓、跳幀、黑屏問題。

3、對於黑屏問題一般是前後端互動的時候發生的問題。比如前端是POST請求 那麼後端收到也應該是POST請求。但是微信內建瀏覽器不一樣。

它強制性 的轉成了 OPTION型別。所以後端收到的就是錯誤的資料。而且抓包的時候也會看到前端發出的資料是 null  。所以就需要正確的在前後端進行

改進。

4、以下是主要程式碼。

function  Http(){
    var _succCallback = function(){};//回撥函式
    var _errCallback = function(){}; //出現錯誤的回撥函式
}

function createXMLHttpRequest() {
    var xmlHttp;
    if (window.XMLHttpRequest) {
        xmlHttp = new XMLHttpRequest();
        if (xmlHttp.overrideMimeType)
            xmlHttp.overrideMimeType('text/xml');
    } else if (window.ActiveXObject) {
        try {
            xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
                xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {
            }
        }
    }
    return xmlHttp;
}

Http.prototype.getJSON = function(url,data,callBack,errorCallBack ){
    if(typeof (callBack) == "function"){
        this._succCallback = callBack;
    }else{
        this._succCallback = function(){}
    }
    if(typeof (errorCallBack) == "function"){
        this._errorCallBack = errorCallBack;
    }
    var xmlHttp = createXMLHttpRequest();
    var datato2 = cc.loader._str2Uint8Array(data); //加密 [201,34,...]
    xmlHttp.open("POST", url+"?header=qqqq", true );//encodeURI(String(datato2)), true);
    xmlHttp.send(datato2); 
    Utils.showWaitting();
    
    var self = this;
    var callBack2 = callBack;
    var currentScene = cc.director.getRunningScene();
    xmlHttp.onreadystatechange = function(){ // ajax回撥
        if (xmlHttp.status == 0) {
            Utils.showLowNet();
            self._succCallback("fail");
            return;
        }
        if(xmlHttp.readyState == 4){
            if( xmlHttp.status == 200 ){
                var strData = xmlHttp.response;
                if(strData.length>0){      //當內容為空時會有"[]"
                    self._succCallback(strData);
                }else{
                    cc.log("連結不暢,請檢查網路");
                    return;
                }
            }else{
                //網路錯誤處理
                if(self._errorCallBack) {
                    cc.log("連線失敗");
                }
            }
        }else{
            //網路錯誤處理
            if(self._errorCallBack) {
                cc.log("連線失敗");
            }
        }
    }
}