Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / WebEngine. Как перехватить смену URL-а и закончить обработку? / 10 сообщений из 10, страница 1 из 1
05.08.2016, 01:42
    #39286808
Maxifly
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WebEngine. Как перехватить смену URL-а и закончить обработку?
Делаю FXML с WebView и два класса.
Один контроллер, другой - модель.
Контроллер устанавливает в модели ссылку на WebEngine.
В модели делаю перехват смены URL и если он сменился на какой-то определенный, то вытаскиваю из него токен (в примере я его пока не вытаскиваю, а хардкожу на kuku) и сохраняю в приватный атрибут. И есть функция, которая возвращает значение атрибута:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
this.currentLocationProperty = this.webEngine.locationProperty();
        currentLocationProperty.addListener(new ChangeListener<String>() {
            @Override
            public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
                log.debug("new URL: {}", newValue);
                if (newValue.contains("access_token")) {
                    log.debug("TOKEN!!!!");
                    token1 = "kuku";
                }
            }
        });

    public String getToken1() {
        return token1;
    }



И еще там же делаю метод, который загружает в WebEngine стартовый URL:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
   public void connect()  {

        log.info("Get access token");
        // получаем URL аутентификации
        String sUrl = UrlCreator.getAuthUrl(Constants.getApplId(), Constants.getScopes());
        log.debug("sUrl: {}", sUrl);

        webEngine.load(sUrl);
}




в майне в методе start открываю окно с WebView и пытаюсь дождаться, когда достигну ожидаемого URL-а:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
public class Fb2App extends Application {
    @Override
    public void start(Stage primaryStage) throws Exception {
....

       Parent parent = factory_gui.createLoginForm();
        Scene scene1 = new Scene(parent, 400, 250);
        primaryStage.setScene(scene1);

        DM_Login dm_login = factory_gui.getDm_login();

        dm_login.connect();
        primaryStage.show();
        Thread.sleep(1000);

//        while (dm_login.getToken1() == null) {
//            Thread.sleep(1000);
//        }

        System.out.println("dm_login.getToken1() " + dm_login.getToken1());



    }




Если я цикл заскоментирую (как в примере)- то окно отрисовывается нормально.
Если раскоментирую - то окно не отрисовывается.
Но мне же он как бы нужен - это я жду пока URL внужный не будет достигнут.

Я явно что-то делаю не так. Но что?



Люблю галеры - работящий коллектив, романтика мужского труда. Стоишь на мостике в пене брызг и эдак поворотясь:
- Голубчик! Утроить количество ударов - Али-паша уходит...
...
Рейтинг: 0 / 0
05.08.2016, 08:34
    #39286864
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WebEngine. Как перехватить смену URL-а и закончить обработку?
Maxifly,
Зачем это все?
И откуда взялся токен?
...
Рейтинг: 0 / 0
05.08.2016, 10:31
    #39286936
Maxifly
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WebEngine. Как перехватить смену URL-а и закончить обработку?
Petro123,
я пробую написать логин приложения к вконтакту.
Там надо открыть некую стартовую страницу, повводить логин пользователя и пароль, ответить на вопросы.
В ответ произойдет редирект на заранее оговоренную страницу. В URL-е в QSV будет находится токен. Он нужен для дальнейшей работы.
...
Рейтинг: 0 / 0
05.08.2016, 10:48
    #39286952
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WebEngine. Как перехватить смену URL-а и закончить обработку?
Maxiflyя пробую написать логин приложения к вконтакту.
Вот это надо расписать на абзац текста. Т.к. ничего не понял.
MaxiflyТам надо открыть некую стартовую страницу, повводить логин пользователя и пароль, ответить на вопросы.
У вас не работает, т.к. нужно чётко расписать все события.
В движке эксплорера в десктопе нужно чётко расписать где команды из кода, а где вводит юзверь и где мы получаем события.
Maxiflyв майне в методе start открываю окно с WebView и пытаюсь дождаться, когда достигну ожидаемого URL-а:
Что значит достигну?
- Если подписан на событие ввода побуквенного урла, то на каждый ввод символа проверяем урл.
А функция Start должна пройти без всяких циклов и задержек.
Стартанул, и жди события.
...
Рейтинг: 0 / 0
05.08.2016, 11:07
    #39286965
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WebEngine. Как перехватить смену URL-а и закончить обработку?
Maxifly,
авторКак перехватить смену URL-а
у движка есть событие когда загрузка страницы завершена.
Ты наверно об этом?
...
Рейтинг: 0 / 0
05.08.2016, 12:36
    #39287064
Maxifly
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WebEngine. Как перехватить смену URL-а и закончить обработку?
Petro123,
Не об этом.
Событие есть и я его перехватываю:
см мой первый листинг с this.currentLocationProperty

Вопрос в том, как мне вытащить то значение, что я перехватил из объекта, который за модель отвечает?
...
Рейтинг: 0 / 0
05.08.2016, 12:49
    #39287086
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WebEngine. Как перехватить смену URL-а и закончить обработку?
убери из start sleep и while и напиши вопрос+код по новой.
Т.к.:
MaxiflyНо мне же он как бы нужен - это я жду пока URL внужный не будет достигнут.
и
MaxiflyВопрос в том, как мне вытащить то значение, что я перехватил из объекта, который за модель отвечает?
мне лично непонятен.
...
Рейтинг: 0 / 0
05.08.2016, 14:01
    #39287190
Maxifly
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WebEngine. Как перехватить смену URL-а и закончить обработку?
Petro123,
про циклы в starte понял.
А по непонятным вопросам сейчас поясню:

Чтобы приложение работало во Вконтакт-е надо получить токен.
Чтобы получить токен, надо открыть страницу по определенному URL-у (из вконтактовсой доки). То есть - это не моя страница - эо вконтакт мне ее генерит и отдает. В етом же URL-е в QS указывается на какую страницу вконтакт должен редирект сделать, когда авторизация пройдет (назовем ее "конечный URL"). Вконтакт не сразу делает редирект а погоняет пользователя еще по страничкам. Как редирект произойдет, то в URL-е будет токен. Его потом надо использовать для REST-запросов.

Вот для этого весь сыр-бор.
Эвент на смену URL-а я перехватываю, как только URL - конечный - я вынимаю из него токен и сохраняю его в модели.
В javaFX ведь model view viewmodel pattern.

Теперь остается вопрос. Как со стороны узнать, что в модели атрибут с токеном уже установлен?
Я делал это циклически опрашивая атрибут, пока он не станет отличным от null.
.
Ну как-то так.
...
Рейтинг: 0 / 0
05.08.2016, 14:47
    #39287257
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WebEngine. Как перехватить смену URL-а и закончить обработку?
MaxiflyЯ делал это циклически опрашивая атрибут, пока он не станет отличным от null.
можно на каждый реквест-запрос-конец_загрузки проверить есть ли токен.
Если есть, написать красным: "Коннект установлен, авторизация пройдена".
Т.е. брать события ОТ них, а не самому циклом.
...
Рейтинг: 0 / 0
05.08.2016, 14:49
    #39287260
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WebEngine. Как перехватить смену URL-а и закончить обработку?
MaxiflyВ javaFX ведь model view viewmodel pattern.
а вообще в веб - REST.
Т.е. на каждый новый запрос или ответ проверять что либо по новой, т.к. тебя не помнят (без токена).
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / WebEngine. Как перехватить смену URL-а и закончить обработку? / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]