如何检测 WebGL 是否在 Facebook Canvas

How to detect if WebGL is on Facebook Canvas

我目前遇到一个问题,我正在使用适用于 Unity 的 Facebook 插件 v.7.1.0。我通过 WebGL 进行分发,但我的应用程序需要 运行 既在 Facebook 上,也在 Facebook 之外。当使用 FB.Init 时,我得到一个成功的回调,这是我在为 WebPlayer 部署时用来测试是否在 Facebook canvas 上的回调。

所以我的问题是,如何检测 WebGL 播放器是否在 facebook canvas 上?

在Unity的WebGL中,可以与javascript进行通信。 link

所以,我调用一个 javascript 函数来检查当前 url

C#

Application.ExternalCall("GetCurrentUrlType");

JS

function GetCurrentUrlType(){
  var url = document.URL;
  if (url.indexOf("apps.facebook.com") > -1)
    SendMessage("GameObject", "CheckURL", "facebook");
}

希望对您有所帮助!!!

此解决方案仅发布给任何想要与我使用的相同解决方案的人。

解决方案是使用这里描述的 jslib 插件 http://docs.unity3d.com/Manual/webgl-interactingwithbrowserscripting.html

var FacebookCanvasChecker = {
    GetSite: function()
    {
        var url = document.URL;
        var returnStr = "";
        if (url.indexOf("apps.facebook.com") > -1)
            returnStr = "facebook";
        else
        {
            // try with referer
            if(document.referrer)
            {
                url = document.referrer;
                if (url.indexOf("apps.facebook.com") > -1)
                    returnStr = "facebook";
                else
                    returnStr = url;
            }
            else
                returnStr = url;
        }

        var buffer = _malloc(returnStr.length + 1);
        writeStringToMemory(returnStr, buffer);
        return buffer;
    }
};

mergeInto(LibraryManager.library, FacebookCanvasChecker);