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

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

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