1
0
Fork 0
mirror of https://github.com/openstf/stf synced 2025-10-06 03:50:04 +02:00
OpenSTF/res/app/components/stf/native-url/native-url-service.js
Gunther Brunner 769a6b1d78 Add Native Url opener service.
Chat temporarily enabled with the Native Url opener.
2014-09-19 17:37:37 +09:00

89 lines
2 KiB
JavaScript

module.exports = function NativeUrlServiceFactory($window, $timeout) {
var service = {}
// Ways of opening native URLs:
// - window.open
// - window.location.href
// Ways of detecting failure:
// - new window timeout
// - window onblur timeout
// - javascript single thread time elapsed
// Browser Behaviours:
// - Chrome Mac: 25ms timeout OK
// - Firefox Mac: 250ms timeout OK, 1000ms timeout better
// - Safari Mac: no working fallback, may need 2 html pages
// navigator.userAgent.match()
// TODO: Find which method works well in every browser
var fallbackMethod = 'USE_ON_BLUR'
var wasBlured = false
var windowOpened
// TODO: use a central on-blur event
var cachedWindowOnBlur = $window.onblur
service.open = function (options) {
switch (fallbackMethod) {
case 'USE_NEW_WINDOW':
// Doesn't work well on Chrome
windowOpened = $window.open(options.nativeUrl)
$timeout(function () {
if (windowOpened) {
windowOpened.close()
}
}, 500)
$window.location.href = options.webUrl
break;
case 'USE_ON_BLUR':
// Doesn't work on Safari
$window.onblur = function () {
wasBlured = true
}
$window.location.href = options.nativeUrl
$timeout(function () {
if (wasBlured) {
wasBlured = false
} else {
$window.open(options.webUrl, '_blank')
}
$window.onblur = cachedWindowOnBlur
}, 250)
break;
case 'USE_TIME_ELAPSED':
// Doesn't work on Chrome
var start, end, elapsed
start = new Date().getTime()
console.log(' window.performance.webkitNow()', window.performance.now())
// This depends on the fact that JS is single-thread
document.location = options.nativeUrl
end = new Date().getTime()
elapsed = (end - start)
if (elapsed < 1) {
document.location = options.webUrl
}
break;
default:
}
}
return service
}