Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Нужно отследить редирект попап окна и получить url страницы на которую перешёл юзер (https://javascript.ru/forum/misc/65633-nuzhno-otsledit-redirekt-popap-okna-i-poluchit-url-stranicy-na-kotoruyu-pereshjol-yuzer.html)

alex.bityuckov@yandex.ru 30.10.2016 22:03

Нужно отследить редирект попап окна и получить url страницы на которую перешёл юзер
 
Создаю окно
var newWin = window.open('https://oauth.vk.com/authorize?client_id=5696649&display=popup&redirect _uri=https://oauth.vk.com/blank.html%20&scope=messages,friends&response_type =code&v=5.59', "vk", "width=200,height=200");
newWin.focus();

Не смог отыскать в гугле как отследить изменение url попап окна. То есть юзер кликает по копке и переходит на страницу ответа и мне после этого надо вытащить новый url.

Aetae 30.10.2016 22:10

Никак. Никто вам не даст следить за тем куда там ходит юзер.

alex.bityuckov@yandex.ru 30.10.2016 22:13

Почему?
У это же дочернее окно.

Aetae 30.10.2016 22:18

alex.bityuckov@yandex.ru, а какая разница? Что новое окно что новая вкладка, юзер может из неё куда угодно перейти.
Окно вам доступно только если домен тот же и не поменялся.

alex.bityuckov@yandex.ru 30.10.2016 22:20

То есть если юзер вобъёт в адресную строку попапа свою ссылку то я не смогу управлять окном через newWin?

Aetae 30.10.2016 22:26

Смотря что понимать под управлять. Перенаправить пользователя куда-нибудь всё ещё можно, а узнать где он - нет.

alex.bityuckov@yandex.ru 30.10.2016 22:32

Хорошо. В api вк есть такой абзац и он говорит, что сначало надо перенаправить пользователя, потом забрать из его адресной строки код и затем при помощи кода получить acess_token(только на сутки). Для обновления токена всё это надо провернуть снова, но пользователь не должен после перевого перенаправления что-то подтверждать т.к. он уже принимал раньше и всё вроде как можно сделать в автоматическом режиме. Отсюда вопрос как мне реализовать подобный функционал без попапа, то есть перенаправить пользователя и мониторить его url?

Aetae 30.10.2016 22:58

Нет. "Он" говорит не это.
"Он" говорит примерно следующее(детали могут отличаться, но суть всегда одна):
Цитата:

Сообщение от VK
3. Получение access_token
После успешной авторизации приложения браузер пользователя будет перенаправлен по адресу REDIRECT_URI, указанному при открытии диалога авторизации. При этом ключ доступа к API access_token и другие параметры будут передана в URL-фрагменте ссылки:
http://REDIRECT_URI#access_token=533bacf01e11f55b536a565b57531ad114461ae8736d6506a3&expires_in=86400&user_id=8492

Очевидно, что в redirect_uri вам следует указать собственный сайт и принять токен на сервере. Но можно, если хочется, и получить из открытого окна через js, т.к. домены будут совпадать, связавшись через window.opener, либо периодически проверяя не появилоcь ли разрешения читать location открытого окна.

alex.bityuckov@yandex.ru 31.10.2016 17:11

C редиректом не вариант там ошибка в документации и можно использовать только url указанные в настройках приложения, но их просто нет для standalone приложения, поэтому можно использовать только такую ссылку для редирект https://oauth.vk.com/blank.html. А на счёт window.opener я не совсем понял как через него я должен отследить url дочернего окна? Он же даёт ссылку на родительское окно?

alex.bityuckov@yandex.ru 31.10.2016 17:33

Короче я немного погорячился на счёт ошибки в документации вк. Просто не совсем точно сказано. У них есть настройка доверенного uri, просто это находится в графе open api и его сначала надо включить полностью заполнить и только тогда появиться возможность добавлять доверенные uri, что весьма странно(так как можно работать с api и без open api). Но вопрос второй остался. Как через window.opener я должен отследить url дочернего окна? Он же даёт ссылку на родительское окно?

Aetae 31.10.2016 18:04

window.opener - это если б редиректило на вашу же страницу.

Насколько я понял, если у вас "standalone" приложение, то подразумевается, что оно работает не в обычном браузере, а является именно именно приложением и для запроса токена использует webview или аналоги. Над webview изнутри приложения вы само собой имеете полный контроль и можете получить результирующий url.

alex.bityuckov@yandex.ru 01.11.2016 19:03

Методом изучения документации снизу вверх я примерно до этого и дошёл. Отсюда вопрос:"Как сэмулировать браузер на js прямо на странице?", "Возможно ли такое извращение?". Нам просто необходим данный функционал(отправить сообщение в веб-приложении).

alex.bityuckov@yandex.ru 01.11.2016 19:07

Если вообще такое не возможно, то как вообще можно будет реализовать необходимый функционал, с условием что на страницу показываемую пользователем я могу загружать только js код.

Aetae 01.11.2016 19:33

Только на js - никак.
Мб вам и не нужны права sandalone и хватит обычных?
Если таки нужны - то только просить пользователя скопировать вам этот самый токен. Вроде(не уверен) если запросить разрешение "offline", то он будет вечным.

alex.bityuckov@yandex.ru 01.11.2016 19:38

Обычных прав не хватит это точно. Уже проверил. Offline token тоже не подойдёт, с него нельзя сообщения отправлять(тоже проверял). Если просто скопировать токен то он через сутки протухнет, а каждый день просить не вариант. Отсюда я вижу два решения: либо запихнуть в js браузер и контролировать его, либо писать сервер и как то при помощи сервера эмулировать браузер у пользователя

alex.bityuckov@yandex.ru 01.11.2016 19:39

А вы как считаете?

Aetae 01.11.2016 19:45

Ну через сервер всё можно, практически обычное проксирование. Наверняка можно нагуглить готовый код для этой задачи.
А браузер в браузере сделать не получится, ибо все ограничения на внешние запросы остаются.

alex.bityuckov@yandex.ru 01.11.2016 19:47

Тогда будем считать тему закрытой. Большое спасибо за инфу.


Часовой пояс GMT +3, время: 18:57.