Return 来自 UnityWebGL jslib 的字符串

Return string from UnityWebGL jslib

我想用jslib获取url参数

这样的代码

jslib

  GetUrl: function(){
  var s ="";
  var strUrl = window.location.search;
  var getSearch = strUrl.split("?");
  var getPara = getSearch[1].split("&");
  var v1 = getPara[0].split("=");
        alert(v1[1]);
   return v1[1];
  },
});

c#

[DllImport("__Internal")]
public static extern string GetUrl();


void Start () {
    TextShow.text = GetUrl();
}

当 运行 来自 jslib 的警报时,我看到警报中显示正确的字符串,但 UGUI 文本不显示任何内容。

为什么会这样?

到return string从Javascript到Unity,你必须使用_malloc分配内存然后writeStringToMemory复制string v1[1] 变量中的数据到新分配的内存中,然后 return 那。

GetUrl: function()
{
  var s ="";
  var strUrl = window.location.search;
  var getSearch = strUrl.split("?");
  var getPara = getSearch[1].split("&");
  var v1 = getPara[0].split("=");
  alert(v1[1]);


   //Allocate memory space
   var buffer = _malloc(lengthBytesUTF8(v1[1]) + 1);
   //Copy old data to the new one then return it
   writeStringToMemory(v1[1], buffer);
   return buffer;
}

writeStringToMemory 函数现在似乎是 deprecated,但您仍然可以用 stringToUTF8 做同样的事情,并在其第三个参数中证明字符串的大小。

GetUrl: function()
{
  var s ="";
  var strUrl = window.location.search;
  var getSearch = strUrl.split("?");
  var getPara = getSearch[1].split("&");
  var v1 = getPara[0].split("=");
  alert(v1[1]);


   //Get size of the string
   var bufferSize = lengthBytesUTF8(v1[1]) + 1;
   //Allocate memory space
   var buffer = _malloc(bufferSize);
   //Copy old data to the new one then return it
   stringToUTF8(v1[1], buffer, bufferSize);
   return buffer;
}