mirror of
https://github.com/ionic-team/ionic-framework.git
synced 2025-08-19 03:32:21 +08:00
90 lines
1.6 KiB
JavaScript
90 lines
1.6 KiB
JavaScript
|
|
import * as util from 'ionic/util'
|
|
|
|
class WebView {
|
|
constructor(options) {
|
|
util.extend(this, options)
|
|
}
|
|
}
|
|
|
|
let registry = {}
|
|
let defaultWebView;
|
|
let activeWebView;
|
|
|
|
class WebViewController {
|
|
|
|
constructor() {
|
|
let self = this
|
|
let proxyMethods = 'ready fullScreen showStatusBar exitApp'.split(' ')
|
|
for (let x = 0; x < proxyMethods.length; x++) {
|
|
this[proxyMethods[x]] = function() {
|
|
return self.proxy(proxyMethods[x], arguments)
|
|
}
|
|
}
|
|
}
|
|
|
|
proxy(target, args) {
|
|
let webview = this.get()
|
|
if (webview && webview[target]) {
|
|
return webview[target].apply(this, args)
|
|
}
|
|
return new Promise(resolve => {}, reject => {
|
|
reject()
|
|
})
|
|
}
|
|
|
|
is(name) {
|
|
return this.getName() === name
|
|
}
|
|
|
|
isWebView() {
|
|
return !!this.get().isWebView
|
|
}
|
|
|
|
getName() {
|
|
return this.get().name
|
|
}
|
|
|
|
get() {
|
|
if (util.isUndefined(activeWebView)) {
|
|
this.set(this.detect())
|
|
}
|
|
return activeWebView || defaultWebView
|
|
}
|
|
|
|
set(webview) {
|
|
activeWebView = webview
|
|
}
|
|
|
|
setDefault(webview) {
|
|
if (!webview instanceof WebView) webview = new WebView(webview)
|
|
defaultWebView = webview
|
|
}
|
|
|
|
register(webview) {
|
|
if (!webview instanceof WebView) webview = new WebView(webview)
|
|
webview.isWebView = true
|
|
registry[webview.name] = webview
|
|
}
|
|
|
|
detect() {
|
|
for (let name in registry) {
|
|
if (registry[name].isMatch()) {
|
|
return registry[name]
|
|
}
|
|
}
|
|
return null
|
|
}
|
|
|
|
}
|
|
|
|
export let webview = new WebViewController()
|
|
|
|
|
|
webview.setDefault({
|
|
name: 'default',
|
|
ready: util.dom.windowLoad
|
|
})
|
|
|
|
|