Как из скрипта переименовать название браузера в веб интерфейсе?

Поддержка
  • Всем привет! Подскажите, пожалуйста, как из скрипта переименовать название браузера в веб интерфейсе? У меня запускается несколько браузеров одновременно (в разных функциях) и для каждого браузера нужно уникальное название (в соответствии функции которую он исполняет)

    Screenshot_30.png

  • ап

  • @invest193 said in Как из скрипта переименовать название браузера в веб интерфейсе?:

    Всем привет! Подскажите, пожалуйста, как из скрипта переименовать название браузера в веб интерфейсе? У меня запускается несколько браузеров одновременно (в разных функциях) и для каждого браузера нужно уникальное название (в соответствии функции которую он исполняет)

    Действие "Выполнить яваскрипт в веб интерфейсе" с кодом

    document.querySelector('button[data-thread-number="' + ([[THREAD_INDEX]]-1) + '"]').querySelector('span.uk-text-middle ').innerText = "hello"
    

    переименует вкладку в "hello"

    support1289.gif

    Но, что бы вкладка переименовалась, она должна быть видна на странице, то есть в интерфейсе должен быть открыта страница "Inspect browsers"

    a3b573a0-f786-44a3-8bcb-71a00e80b78c-изображение.png

    Ну и последний момент, так как эта страница генерируется, то вкладка вернётся в прежнее состояние

    support1290.gif

  • Проще всего хранить названия вкладок и подгружать при генерации страницы. Для этого нужно модифицировать функцию UpdateBrowsersIds() из подключаемого файла https://bablosoft.com/buildinterface/interface-extensions/extensions.js?v=2

    de4ca40d-7170-4e37-9514-3704310fd567-изображение.png

    712c3d9c-e58d-4cef-9a7e-45d7076e8530-изображение.png

    dd98d130-7079-470d-b2e3-c141a1fd2fe3-изображение.png


    Вариант для самых ленивых:

    1. Заменить подключаемый файл https://bablosoft.com/buildinterface/interface-extensions/extensions.js?v=2 на https://community.bablosoft.com/assets/uploads/files/1657452513241-tabs_names_extensions.js

    6bf1313c-891f-4855-b3f5-a33416c504cd-изображение.png

    1. Использовать в BAS действие "Выполнить яваскрипт в веб интерфейсе" с кодом:
    window.tabs_names[ [[THREAD_INDEX]]-1 ] = {
        name:"Название"
    }
    

    Всё! Теперь вкладки будут всегда называться именно так, как вы их назвали

    support1292.gif

  • А как зайти в browser content viewer?

  • @xiniy22281 said in Как из скрипта переименовать название браузера в веб интерфейсе?:

    А как зайти в browser content viewer?

    на главной странице нажмите на кнопку "Inspect browsers"

  • @Fox У меня почему-то отличается от того что у Вас
    d880958d-f01a-4990-99d7-ee85a79e397c-image.png

  • @xiniy22281 said in Как из скрипта переименовать название браузера в веб интерфейсе?:

    @Fox У меня почему-то отличается от того что у Вас

    А причём здесь содержание страницы, которую загрузил браузер BAS в скрипте? Речь идёт о сгенерированном веб интерфейсе
    https://wiki.bablosoft.com/web-interface/#/

  • @Fox Спасибо за идею но тут есть проблема после закрытия первых потоков.

    Например:

    Мы запустили 3 потока, в веб-интерфейсе и имеем BrowserIds = { 1 : 4659, 2 : 5495, 3 : 5400 } в самом скрипте THREAD_INDEX = 2,3,4 соотвественно, всё нормально.

    Но как только у нас заканчивает роботу первый поток и создается новый, тут появляется проблема...

    В веб-интерфейсе он получает ключ "1" который освободился в обьекте BrowserIds, а вот в скрипте THREAD_INDEX становится не 2 ( как ожидалось ) а 5! То есть он идёт на увеличение от значнения последнего созданного потока. В этот момент у нас полностью расходятся их идентификаторы и невозможно нормально получить tabs_name по нужному ThreadNumber.

    Может есть идея как это можно решить? В идеале было бы знать значение BrowserId внутри бас скрипта, таким образом железно привязывать по этому идентификатору.

  • @centerdevs said in Как из скрипта переименовать название браузера в веб интерфейсе?:

    @Fox Спасибо за идею но тут есть проблема после закрытия первых потоков.

    Например:

    Мы запустили 3 потока, в веб-интерфейсе и имеем BrowserIds = { 1 : 4659, 2 : 5495, 3 : 5400 } в самом скрипте THREAD_INDEX = 2,3,4 соотвественно, всё нормально.

    Но как только у нас заканчивает роботу первый поток и создается новый, тут появляется проблема...

    В веб-интерфейсе он получает ключ "1" который освободился в обьекте BrowserIds, а вот в скрипте THREAD_INDEX становится не 2 ( как ожидалось ) а 5! То есть он идёт на увеличение от значнения последнего созданного потока. В этот момент у нас полностью расходятся их идентификаторы и невозможно нормально получить tabs_name по нужному ThreadNumber.

    Может есть идея как это можно решить? В идеале было бы знать значение BrowserId внутри бас скрипта, таким образом железно привязывать по этому идентификатору.

    В чём собственно проблема то? При запуске потоков из веб интерфейса вы получаете их id и по ним можете выяснить всё что нужно: https://wiki.bablosoft.com/web-interface/#/callbasfunction?id=function-statistic

  • @Fox Работа устроена так что некоторые потоки запускаются из скрипта, и их нет в объекте который возвращает GetTasks.

    А на счёт ID потока, часто бывает что в веб-интерфейсе у потока ID = 1, а в скрипте THREAD_INDEX = 5, ситуация описана выше. Получается что у меня нет точного идентификатора который имел бы одинаковое значение и там и там.

    Если каким-то обазом получать BrowserId внутри скрипта - было бы идеально.

  • @centerdevs said in Как из скрипта переименовать название браузера в веб интерфейсе?:

    @Fox Работа устроена так что некоторые потоки запускаются из скрипта, и их нет в объекте который возвращает GetTasks.

    Так и было задумано, метод GetTasks() возвращает список функций запущенных из веб интерфейса, он не покажет потоки запущенные иначе.

    А на счёт ID потока, часто бывает что в веб-интерфейсе у потока ID = 1, а в скрипте THREAD_INDEX = 5, ситуация описана выше. Получается что у меня нет точного идентификатора который имел бы одинаковое значение и там и там.

    Какой смысл привязываться к номеру потока в принципе? Если вы создаёте потоки из скрипта, вы не получите к нему доступ через GetTasks(). Что бы открыть браузер вызванного потока, вам нужно будет прослушивать событие "browser_add" что бы в нём получить id браузера

    Создавайте все потоки из веб интерфейса, зачем создавать потоки из скрипта?

    Если каким-то обазом получать BrowserId внутри скрипта - было бы идеально.

    Чисто технически вы можете прослушивать событие "browser_add" и сохранять данные в объекте в веб интерфейсе. Удобнее всего было бы использовать ключ номер потока, а значение id браузера. Так как получить данные из интерфейса внутри потока во время его работы возможно только через глобальную переменную, то при получении данных от события их можно дублировать в глобальную переменную

    Api.SetEventHandler(async function (EventType, EventData) {
    
        if (EventType == "browser_add") {
            var obj = await Api.GetGlobalVariable("OBJ") 
            if(obj == "") obj = {};
            obj[EventData.thread_number] = EventData.browser_id;
            await Api.SetGlobalVariable("OBJ", obj);
        }
    

    67cfd78a-842a-452b-9c3b-b7983344a538-изображение.png

    Тестовый скрипт: 2588.xml