提交 6cfba0e5 编写于 作者: 雪洛's avatar 雪洛

Merge branch 'dev' of https://github.com/dcloudio/uni-app into dev

let plus_
let weex_
let uni_
let runtime
let BroadcastChannel_
function getRuntime () {
return runtime || (runtime = typeof window === 'object' && typeof navigator === 'object' && typeof document ===
'object'
? 'webview' : 'v8')
}
function setRuntime (value) {
runtime = value
return typeof window === 'object' && typeof navigator === 'object' && typeof document === 'object' ? 'webview' : 'v8'
}
function getPageId () {
return plus_.webview.currentWebview().id
}
let initedEventListener = false
let channel
const callbacks = {}
function addEventListener (pageId, callback) {
const runtime = getRuntime()
function onPlusMessage (res) {
const message = res.data && res.data.__message
if (!message || !message.__page) {
return
}
const pageId = message.__page
const callback = callbacks[pageId]
callback && callback(message)
if (!message.keep) {
delete callbacks[pageId]
}
function onPlusMessage (res) {
const message = res.data && res.data.__message
if (!message || !message.__page) {
return
}
if (!initedEventListener) {
if (runtime === 'v8') {
const globalEvent = weex_.requireModule('globalEvent')
globalEvent.addEventListener('plusMessage', onPlusMessage)
} else if (runtime === 'v8-native') {
uni_.$on(getPageId(), onPlusMessage)
} else {
window.__plusMessage = onPlusMessage
}
initedEventListener = true
const pageId = message.__page
const callback = callbacks[pageId]
callback && callback(message)
if (!message.keep) {
delete callbacks[pageId]
}
}
function addEventListener (pageId, callback) {
if (getRuntime() === 'v8') {
channel && channel.close()
channel = new BroadcastChannel_(getPageId())
channel.onmessage = onPlusMessage
} else {
window.__plusMessage = onPlusMessage
}
callbacks[pageId] = callback
}
......@@ -55,19 +41,13 @@ class Page {
this.webview = webview
}
sendMessage (data) {
const runtime = getRuntime()
const message = {
__message: {
data
}
}
if (runtime === 'v8-native') {
uni_.$emit(this.webview.id, {
data: JSON.parse(JSON.stringify(message))
})
} else {
plus_.webview.postMessageToUniNView(message, this.webview.id)
}
const channel = new BroadcastChannel_(this.webview.id)
channel.postMessage(message)
}
close () {
this.webview.close()
......@@ -75,31 +55,17 @@ class Page {
}
export function showPage ({
context,
runtime,
context = {},
url,
data = {},
style = {},
onMessage,
onClose
}) {
if (context) {
plus_ = context.plus
weex_ = context.weex
uni_ = context.uni
} else {
// eslint-disable-next-line
plus_ = typeof plus === 'object' ? plus : null
// eslint-disable-next-line
weex_ = typeof weex === 'object' ? weex : null
// eslint-disable-next-line
uni_ = typeof uni === 'object' ? uni : null
}
if (runtime) {
setRuntime(runtime)
} else {
runtime = getRuntime()
}
// eslint-disable-next-line
plus_ = context.plus || plus
// eslint-disable-next-line
BroadcastChannel_ = context.BroadcastChannel || BroadcastChannel
const titleNView = {
autoBackButton: true,
titleSize: '17px'
......@@ -118,7 +84,7 @@ export function showPage ({
animationType: 'pop-in',
animationDuration: 200,
uniNView: {
path: `${(typeof process === 'object' && process.env && process.env.VUE_APP_TEMPLATE_PATH) || ''}/${url}.js`,
path: `${(typeof process === 'object' && process.env && process.env.VUE_APP_TEMPLATE_PATH) || '/template'}/${url}.js`,
defaultFontSize: plus_.screen.resolutionWidth / 20,
viewport: plus_.screen.resolutionWidth
}
......@@ -127,7 +93,7 @@ export function showPage ({
const page = plus_.webview.create('', pageId, style, {
extras: {
from: getPageId(),
runtime: runtime,
runtime: getRuntime(),
data
}
})
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册