Jump to content
Korean Random
Ekspoint

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

Recommended Posts

Как в бою вызвать окно встроенного браузера?

Share this post


Link to post

Short link
Share on other sites

Простым способом никак, в 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

Share this post


Link to post

Short link
Share on other sites

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

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

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

 

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

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

Edited by SkepticalFox

Share this post


Link to post

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()

 

Share this post


Link to post

Short link
Share on other sites

@Ekspoint мне все-таки интересно, почему в _ServiceDescriptor есть метод __get__, который игнорится

Edited by SkepticalFox

Share this post


Link to post

Short link
Share on other sites
1 минуту назад, SkepticalFox сказал:

@Ekspoint мне все-таки интересно, почему в _ServiceDescriptor есть метод __get__, который игнорит load

посмотрю

может косяк картошки...

Share this post


Link to post

Short link
Share on other sites
10 minutes ago, Ekspoint said:

посмотрю

я вроде понял.

это особенность питона и работы дескриптора __get__

надо, чтобы browserCtrl был членом класса

Share this post


Link to post

Short link
Share on other sites

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

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

  • Upvote 1

Share this post


Link to post

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

Share this post


Link to post

Short link
Share on other sites
4 часа назад, DWG сказал:

 

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

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

  • Upvote 2
  • Downvote 3

Share this post


Link to post

Short link
Share on other sites
28 minutes ago, Ekspoint said:

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

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

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

Edited by SkepticalFox

Share this post


Link to post

Short link
Share on other sites
23 часа назад, Ekspoint сказал:

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

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

Так javascript или java? 

Share this post


Link to post

Short link
Share on other sites
1 час назад, yepev сказал:

Так javascript или java? 

javascript

Share this post


Link to post

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...