diff --git a/saml_client.js b/saml_client.js index 6436840..634a203 100755 --- a/saml_client.js +++ b/saml_client.js @@ -32,22 +32,45 @@ Accounts.saml.initiateLogin = function (options, callback, dimensions) { var openCenteredPopup = function (url, width, height) { - var screenX = typeof window.screenX !== 'undefined' ? window.screenX : window.screenLeft; - var screenY = typeof window.screenY !== 'undefined' ? window.screenY : window.screenTop; - var outerWidth = typeof window.outerWidth !== 'undefined' ? window.outerWidth : document.body.clientWidth; - var outerHeight = typeof window.outerHeight !== 'undefined' ? window.outerHeight : (document.body.clientHeight - 22); - // XXX what is the 22? + var newwindow; - // Use `outerWidth - width` and `outerHeight - height` for help in - // positioning the popup centered relative to the current window - var left = screenX + (outerWidth - width) / 2; - var top = screenY + (outerHeight - height) / 2; - var features = ('width=' + width + ',height=' + height + - ',left=' + left + ',top=' + top + ',scrollbars=yes'); + if (typeof cordova !== 'undefined' && typeof cordova.InAppBrowser !== 'undefined') { + newwindow = cordova.InAppBrowser.open(url, '_blank'); + newwindow.closed = false; + + var intervalId = setInterval(function () { + newwindow.executeScript({ + code: "document.getElementsByTagName('script')[0].textContent" + }, function (data) { + if (data && data.length > 0 && data[0] == 'window.close()') { + newwindow.close(); + newwindow.closed = true; + } + }); + }, 100); + + newwindow.addEventListener('exit', function () { + clearInterval(intervalId); + }); + } else { + var screenX = typeof window.screenX !== 'undefined' ? window.screenX : window.screenLeft; + var screenY = typeof window.screenY !== 'undefined' ? window.screenY : window.screenTop; + var outerWidth = typeof window.outerWidth !== 'undefined' ? window.outerWidth : document.body.clientWidth; + var outerHeight = typeof window.outerHeight !== 'undefined' ? window.outerHeight : (document.body.clientHeight - 22); + // XXX what is the 22? + + // Use `outerWidth - width` and `outerHeight - height` for help in + // positioning the popup centered relative to the current window + var left = screenX + (outerWidth - width) / 2; + var top = screenY + (outerHeight - height) / 2; + var features = ('width=' + width + ',height=' + height + + ',left=' + left + ',top=' + top + ',scrollbars=yes'); + + var newwindow = window.open(url, 'Login', features); + if (newwindow.focus) + newwindow.focus(); + } - var newwindow = window.open(url, 'Login', features); - if (newwindow.focus) - newwindow.focus(); return newwindow; }; @@ -77,4 +100,4 @@ Meteor.logoutWithSaml = function (options, callback) { }); -}; \ No newline at end of file +};