0

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

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

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

ответ

0

Я просто разработал приложение с WebWorks 2,1/Кордова и столкнулся с той же проблемой.

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

BlackBerry 10 WebView, похоже, не поддерживает события загрузки и выхода, поэтому вам необходимо использовать таймер для проверки состояния 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.

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

John

 Смежные вопросы

  • Нет связанных вопросов^_^