Jump to content
Korean Random

Встроенный браузер


Ekspoint

Recommended Posts

Простым способом никак, в battle.swf нет класса BrowserWindow, который представляет собой окно браузера в лобби, и текстуры нет - LobbyApp_browserBgClassValue. Нужно делать флешку с текстурой и свой контроллер браузера, где реализовать открытие/закрытие/обработку ввода и пр.

 

Наверное, стоит рассказать как работает браузер...

 

# вот так можно открыть браузер в лобби:
from gui.game_control import getBrowserCtrl
getBrowserCtrl().load(url='http://ya.ru/')(lambda success: True)

# более сложный (и правильный) пример:
from adisp import process
from gui.game_control import getBrowserCtrl

@process
def showBrowser():

    # все аргументы:
    kwargs = {
        'url': 'http://ya.ru/', # адрес, https://example.com
        'title': None, # текст заголовка окна
        'showActionBtn': True, # показывать кнопку "рефреш/стоп"
        'showWaiting': True, # использовать крутящуюся шестерню во время загрузки контента
        'browserID': None, # уникальный ID этого бразера, чтобы получать его через BrowserController.getBrowser(browserID)
        'isAsync': False, # флаг асинхронности
        'browserSize': None, # размер браузера, tuple([width,height])
        'isDefault': True, # флаг нестандартной текстуры
        'callback': None, # callback, который получит сгененрированный browserID, если его не было в аргументах
        'showCloseBtn': False, # показывать кнопку "закрыть" снизу
        'useWhitelisting': False # начиная c 9.15.1 не используется
    }

    # пример
    browser_ctl = getBrowserCtrl()
    browserID = yield browser_ctrl.load(**kwargs)

showBrowser()

при этом происходит следующее:

  1. Получаем инстанс контроллера браузера BrowserController
  2. Вызываем асинхронный метод load()
    1. Он создаёт новый инстанс WebBrowser
    2. Создаёт каллбек на показ окна BrowserWindow после загрузки страницы
    3. Если в настоящий момент происходит создание браузера (ожидание п.2), добавляет создание в очередь

WebBrowser представляет собой обертку над BigWorld.WebBrowserProvider - BigWorld.createBrowser(browserID). У этого объекта заполняется аттрибут script, который является подписчиком событий браузера (onAddConsoleMessage, onBeginLoadingFrame, onChangeCursor, onChangeTitle, onDocumentReady, onFailLoadingFrame, onFilterNavigation, onFinishLoadingFrame, onShowCreatedWebView, onWhitelistMiss), настраиваются обработчики кнопок и мыши, устанавливается текстура (имя) для рендеринга контента в неё.

 

  • Upvote 1
Link to comment
Short link
Share on other sites

  • 1 year later...

@aks1983 привет. Стало нужно в окне логина вызвать браузер, но не смог вызвать его даже в лобби.

В общем мне лень разбираться)

Не подкинешь актуальный код?

 

browserCtrl = dependency.descriptor(IBrowserController)
browserCtrl.load(url='http://ya.ru/')(lambda success: True)

дает ошибку
AttributeError: '_ServiceDescriptor' object has no attribute 'load'

Edited by SkepticalFox
Link to comment
Short link
Share on other sites

class BrowserWindow(object):
                       
    @process
    def browser(self, url, title, browserSize):
        yield skeletons.browserCtrl.load(url=url, title=title, browserSize=browserSize, showActionBtn=True, showCloseBtn=True, showWaiting=True)

browserWindow = BrowserWindow()

 

Link to comment
Short link
Share on other sites

  • 2 months later...

в WebBrowser есть executeJavascript, хочу вызвать функцию, а оно ругается что ее нет 'BigWorld.WebBrowserProvider' object has no attribute 'executeJavascript'

как быть? мне нужно добавить java код

  • Upvote 1
Link to comment
Short link
Share on other sites

20 часов назад, Ekspoint сказал:

в WebBrowser есть executeJavascript, хочу вызвать функцию, а оно ругается что ее нет 'BigWorld.WebBrowserProvider' object has no attribute 'executeJavascript'

как быть? мне нужно добавить java код

 

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

Edited by DWG
  • Upvote 3
  • Downvote 8
Link to comment
Short link
Share on other sites

4 часа назад, DWG сказал:

 

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

идиот, мне для мода нужно

  • Upvote 2
  • Downvote 3
Link to comment
Short link
Share on other sites

28 minutes ago, Ekspoint said:

идиот, мне для мода нужно

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

хотя, конечно, тут уже от нужд мода стоит ориентироваться

Edited by SkepticalFox
Link to comment
Short link
Share on other sites

23 часа назад, Ekspoint сказал:

в WebBrowser есть executeJavascript, хочу вызвать функцию, а оно ругается что ее нет 'BigWorld.WebBrowserProvider' object has no attribute 'executeJavascript'

как быть? мне нужно добавить java код

Так javascript или java? 

Link to comment
Short link
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...