這是我的解決方案。
還有3分我拿起:
jQuery Mobile的需要,否則我得到一個空白屏幕
用於綁定的loadstop目標_blank。使用_self打破了loadstop事件。
需要以下CSS類,以確保InAppBrowser不會對Windows設備
.inAppBrowserWrap {
border: 0 !important;
}
我已經截斷了一些爲清楚起見,代碼的一個巨大的邊界。
的HTML
<!DOCTYPE html>
<html>
<head>
<meta name="format-detection" content="telephone=no">
<meta name="msapplication-tap-highlight" content="no">
<meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width">
<link rel="stylesheet" type="text/css" href="css/index.css">
<title>BlankCordovaApp1</title>
<script type="text/javascript" src="cordova.js"></script>
<script type="text/javascript" src="scripts/platformOverrides.js"></script>
<script type="text/javascript" src="scripts/jquery-mobile/scripts/jquery-1.8.0.min.js"></script>
<script type="text/javascript" src="scripts/jquery-mobile/scripts/jquery.mobile-1.4.5.min.js"></script>
<script type="text/javascript" src="scripts/index.js"></script>
</head>
<body>
<div id="MainContent">
<label>Login here</label>
<input type="text" id="txtUserName" />
<input type="text" id="txtPassword" />
<button type="button" id="btnLogin">Login</button>
<div id="Message">
</div>
</div>
</body>
</html>
的JS
(function(){
"use strict";
var ref = null;
var apiUrl = 'http://192.168.1.3:3000/Api/MobileLogin';
document.addEventListener('deviceready', onDeviceReady.bind(this), false);
function onDeviceReady() {
window.open = cordova.InAppBrowser.open;
document.getElementById('btnLogin').addEventListener('click', login);
};
function login() {
// disable login button
var loginButton = this;
loginButton.disabled = true;
$.ajax({
url: apiUrl,
type: 'post',
data: { Email: $('#txtUserName').val(), Password: $('#txtPassword').val() },
success: function (url) {
LaunchBrowser(url);
// re-enable the button
loginButton.disabled = false;
}
});
};
function LaunchBrowser(url) {
// _blank must be used in order for loadstop to trigger
ref = window.open(
url,
'_blank',
'location=no,hidden=no');
ref.addEventListener('loadstop', function (e) {
if (e.url.match('MobileClose')) {
ref.close();
}
});
};
})();
在Web API返回的手機打一個令牌(1分鐘後到期)的URL。這將用戶登錄並設置會話變量「OnMobile」。
當用戶通過網絡註銷時,用戶被重定向到「MobileClose」,因爲「OnMobile」爲真。這告訴應用關閉InAppBrowser。