我们目前正在使用BlackBerry WebWorks SDK开发一个phonegap应用程序,我们目前无法访问或控制WebView及其URL。
它基本上是加载我不想要的Index.html页面。我想在服务器上加载一些外部URL,然后经过身份验证加载www文件夹的index.html。这不起作用。任何想法如何控制WebView URL?
谢谢, Ankit Tanna
答案 0 :(得分:0)
我刚开发了一个使用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调用以获取用户令牌或其他一些信息......取决于您的实现。
因此,当您的应用启动时,您的第一页应立即进行检查:我是否有存储的用户令牌?如果没有,请启动上述过程。继续开始,直到我有一个存储的用户令牌。当我有一个令牌时,开始从服务器加载用户数据,或从www /或任何你想做的事情加载index.html。
这对我来说效果很好,而且设备处理得很好。
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,然后只需在WebView网址中查看回调URL ..
我希望这有帮助!
约翰