BlackBerry 10 WebWorks BlackBerry 10 PhoneGap WebView URL

В настоящее время мы разрабатываем приложение для телефонных разговоров с использованием BlackBerry WebWorks SDK, и в настоящее время мы не можем получить доступ или управлять WebView и его URL-адресом.

Это в основном загрузка страницы Index.html, которую я не хочу. Я хочу загрузить некоторый внешний URL-адрес на сервер, который затем после аутентификации загружает index.html папки www. Это не работает. Любая идея, как управлять URL-адресом WebView?

Спасибо, Анкит Танна


person Ankit Tanna    schedule 02.09.2014    source источник


Ответы (1)


Я только что разработал приложение с помощью WebWorks 2.1 / Cordova и столкнулся с той же проблемой.

Во-первых, моей целью было перейти на кроссплатформенность, поэтому я использую InAppBrowser (хотя, честно говоря, я не уверен, нужно ли его включать вручную).

BlackBerry 10 WebView, похоже, не поддерживает события loadstart и exit, поэтому вам нужно использовать таймер, чтобы вручную проверить состояние WebView. Что-то вроде этого:

var VIEWER = window.open('http://myauthenticationpage/login.html', '_blank', 'location=no,menubar=no,titlebar=no,toolbar=no,status=no');

//Start a timer to check for a URL change in the WebView
var AuthTimer = setInterval(function () {

    //Handle your failure case your own way, but stopping this loop is a good idea if the WebView isn't open
    if ((typeof VIEWER === 'undefined') || (typeof VIEWER.document === 'undefined')) {
        clearInterval(AuthTimer);
        return; 
    }

    //Get the current URL of the WebView
    var url = VIEWER.document.URL;

    //Process the URL in some way, like to extract a token
    //You can also access the DOM of the loaded page, as another option
    if (url.indexOf('authorizedUser=') > 0) {
        //Extract the username, which my server appends in the query string 
        var user = url.substring(url.indexOf('authorizedUser=') + 15);

        //I store the user token in localStorage
        localStorage.setItem('user', user);

        //Close the viewer and stope this timer
        clearInterval(AuthTimer);
        VIEWER.close();
    }
}, 20);

После этого вам, возможно, придется выполнить ajax-вызов сервера, чтобы получить токен пользователя или другую информацию ... в зависимости от вашей реализации.

Итак, когда ваше приложение запускается, ваша первая страница должна немедленно выполнить проверку: есть ли у меня сохраненный токен пользователя? Если нет, начните описанный выше процесс. Продолжайте запускать его, пока у меня не будет сохраненного токена пользователя. Когда у меня есть токен, начинаю загружать пользовательские данные с сервера или загружать index.html с www /, или делать что угодно.

У меня это хорошо работает, и устройства хорошо с этим справляются.

Примечание для Android / iOS

Если вы решите перенести кроссплатформенность на Android или iOS, вы можете сделать это, используя вместо этого события:

var VIEWER = window.open('http://myauthenticationpage/login.html', '_blank', 'location=no,menubar=no,titlebar=no,toolbar=no,status=no');

VIEWER.addEventListener('exit', function(e) {
    //The webview closed!
    if (user == null) {
        //We still don't have a username
        setTimeout(function () {
            //Kick open the webview again, to try again for a username for example
            //(Might want to wrap all this in a function)
            VIEWER = window.open('http://myauthenticationpage/login.html', '_blank', 'location=no,menubar=no,titlebar=no,toolbar=no,status=no');
        }, 50);
    }
});

VIEWER.addEventListener('loadstart', function(e) {
    //The webview has started loading a new page
    var url = e.url;
    var user = null;

    if (url.indexOf('authorizedUser=') > 0) {
        user = url.substring(url.indexOf('authorizedUser=') + 15);

        localStorage.setItem('user', user);

        VIEWER.close();
    }
});

Используя этот метод, ваша веб-страница должна будет «отразить» некоторые данные в строке запроса или DOM ответа при успешном входе в систему. Я думаю, что для большинства реализаций авторизации просто установите фиктивный URL-адрес обратного вызова в своем запросе, а затем просто посмотрите URL-адрес обратного вызова в URL-адресе WebView.

Надеюсь, это поможет!

Джон

person hanamj    schedule 20.10.2014