2017-01-14 60 views
1

我有一個WebGL的統一項目,試圖在瀏覽器上執行JavaScript代碼並返回一個值。從Unity的瀏覽器調用JavaScript字符串函數返回null

我有以下.jslib文件在我的資產/插件/ WebGL的文件夾:

var BrowserPlugin = { 
    GetEndpointURL: function() 
    { 
     var endpoint = window.itd.getEndpointUrl(); 

     console.log("endpoint: " + endpoint); 

     return endpoint; 
    } 
}; 

mergeInto(LibraryManager.library, BrowserPlugin); 

在團結我的C#代碼,我輸入DLL和調用我的JavaScript方法,像這樣:

[DllImport("__Internal")] 
private static extern string GetEndpointURL(); 

string endpointURL = GetEndpointURL(); 

問題是,在我的C#代碼中,endpointUrl變量始終爲空。但是,在我的瀏覽器控制檯中,我可以清楚地看到在返回JavaScript之前在瀏覽器中記錄了正確的值。什麼導致這個價值返回到統一爲空?

回答

1

這是你的代碼:

GetEndpointURL: function() 
{ 
    var endpoint = window.itd.getEndpointUrl(); 
    console.log("endpoint: " + endpoint); 
    return endpoint; 
} 

不能返回字符串(endpoint)直接。您必須創建一個緩衝區來保存該字符串,並且此過程包括使用_malloc分配內存並將舊字符串複製到writeStringToMemory的新內存位置。

GetEndpointURL: function() 
{ 
    var endpoint = window.itd.getEndpointUrl(); 
    console.log("endpoint: " + endpoint); 

    var buffer = _malloc(lengthBytesUTF8(endpoint) + 1); 
    writeStringToMemory(endpoint, buffer); 
    return buffer; 
}