This is a mobile optimized page that loads fast, if you want to load the real page, click this text.

Проблема [.Net] ExecuteJs - не вызываеться функция CEF

Edward Esteban

Новый участник
11 Ноя 2020
12
1
60
С серверной части на клиент присылаю Guid, на самой CEF форме есть input с типом hidden, в который и пытаюсь присвоить Guid.
Сервер и клиентcкая часть на .Net.

Клиент:
C#:
_createPlayerForm.ExecuteJs($"SetUserId({args[1]})");

CEF:
JavaScript:
function SetUserId(userId){
    $("#user-Id").val(userId);
    mp.console.logInfo(userid, true, true);
}
С формы приходят вот такие данные:

ID должен быть таким:

Кто знает подскажите где я ошибся или что делаю не так?

PS:
На другой форме функция без параметров вызываеться и на CEF приходит сообщение
C#:
_loginRegistrationForm.ExecuteJs("InvalidPassword()");
 

DaVilka

Старожил
BackEnd developer
16 Сен 2020
759
276
128
вызывай через .Call
C#:
public static void ExecuteFunction(string function, params object[] args)
{
    // Call the function with the parameters
    CustomBrowser.Call(function, args);
}
 

Edward Esteban

Новый участник
11 Ноя 2020
12
1
60
вызывай через .Call
C#:
public static void ExecuteFunction(string function, params object[] args)
{
    // Call the function with the parameters
    CustomBrowser.Call(function, args);
}
Вызывать
Код:
_createPlayerForm.Call("SetUserId", args[1]);
или
_createPlayerForm.Call("SetUserId(id)", args[1]);
И вместо той функции использовать?
Код:
mp.events.add("SetUserId", args =>{
    //TODO:
})
Т.к попробовал оба варианта не отсылает на CEF
 

DaVilka

Старожил
BackEnd developer
16 Сен 2020
759
276
128

Edward Esteban

Новый участник
11 Ноя 2020
12
1
60
Не совсем, так, вот тут это уже с учетом адишника, у меня есть Юзер которого я создаю, на одной форме и конкретный игрок на другой, и айди юзера надо привязать игроку, я пытаюсь в <input type="hidden"> засунуть айди и после этого отправляю эти три аргумента на клиент -> сервер
 

DaVilka

Старожил
BackEnd developer
16 Сен 2020
759
276
128
не понял, для того что бы вызвать функцию в цеф из клиент используется ExecuteJs либо Call, для того что бы вызвать функцию из цеф в клиенте, на клиенте надо создать ивент и вызывать из цеф его
C#:
public Browser()
{
    Events.Add("destroyBrowser", DestroyBrowserEvent);
}
public static void DestroyBrowserEvent(params object[] args)
{
    CustomBrowser.Destroy();
    CustomBrowser = null;
}
 

Edward Esteban

Новый участник
11 Ноя 2020
12
1
60
Я с сервера отправляю данные на клиент
C#:
NAPI.ClientEvent.TriggerClientEvent(player, "ShowCreatePlayerForm", true, user.Id);

В клиенте вызываю следующий код:
C#:
Main(){
    Events.Add("ShowCreatePlayerForm", ShowCreatePlayerCef);  
}

private void ShowCreatePlayerCef(object[] args)
{
   
    bool isActive = (bool)args[0];
    _createPlayerForm.Active = isActive;
   
    _createPlayerForm.ExecuteJs($"SetUserId({args[1]})");   // Не отправляет на CEF
}

Через ExecuteJs пытаюсь вызвать эту функцию передав args[1] и она не вызывается через .Call тоже не получилось
JavaScript:
function SetUserId(userId){
    $("#user-Id").val(userId);
}
 

DaVilka

Старожил
BackEnd developer
16 Сен 2020
759
276
128
кинь весь c# клиентку, и попробуй указать тип данных args[1]
 

Edward Esteban

Новый участник
11 Ноя 2020
12
1
60
кинь весь c# клиентку, и попробуй указать тип данных args[1]
Если функцию вызываю без параметров то ExecuteJs работает
C#:
private void SetUserId(object[] args)
        {
            _createPlayerForm.ExecuteJs("SetUserId()");
        }
JavaScript:
function SetUserId(){

    $("#message-id").text("Called function");

    $("#user-Id").val("TEST");   
}

но если подставляю параметр то уже не работает
C#:
private void SetUserId(object[] args)
        {
            _createPlayerForm.ExecuteJs($"SetUserId(args[0])");
        }
JavaScript:
function SetUserId(id){

    $("#message-id").text("Called function");

    $("#user-Id").val(id);   
}
 

Edward Esteban

Новый участник
11 Ноя 2020
12
1
60
Все. Получилось, разобрался, через .Call все пришло, спасибо за помощь.
 
Реакции: DaVilka