提交 0a7e2732 编写于 作者: fxy060608's avatar fxy060608

fix(v3): nextTick bind vm context

上级 0b1f3d7b
...@@ -4142,31 +4142,19 @@ var serviceContext = (function () { ...@@ -4142,31 +4142,19 @@ var serviceContext = (function () {
}); });
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$1 = {}; const callbacks$1 = {};
function addEventListener (pageId, callback) {
const runtime = getRuntime();
function onPlusMessage (res) { function onPlusMessage (res) {
const message = res.data && res.data.__message; const message = res.data && res.data.__message;
if (!message || !message.__page) { if (!message || !message.__page) {
...@@ -4179,17 +4167,15 @@ var serviceContext = (function () { ...@@ -4179,17 +4167,15 @@ var serviceContext = (function () {
delete callbacks$1[pageId]; delete callbacks$1[pageId];
} }
} }
if (!initedEventListener) {
if (runtime === 'v8') { function addEventListener (pageId, callback) {
const globalEvent = weex_.requireModule('globalEvent'); if (getRuntime() === 'v8') {
globalEvent.addEventListener('plusMessage', onPlusMessage); channel && channel.close();
} else if (runtime === 'v8-native') { channel = new BroadcastChannel_(getPageId());
uni_.$on(getPageId(), onPlusMessage); channel.onmessage = onPlusMessage;
} else { } else {
window.__plusMessage = onPlusMessage; window.__plusMessage = onPlusMessage;
} }
initedEventListener = true;
}
callbacks$1[pageId] = callback; callbacks$1[pageId] = callback;
} }
...@@ -4198,19 +4184,13 @@ var serviceContext = (function () { ...@@ -4198,19 +4184,13 @@ var serviceContext = (function () {
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();
...@@ -4218,31 +4198,17 @@ var serviceContext = (function () { ...@@ -4218,31 +4198,17 @@ var serviceContext = (function () {
} }
function showPage ({ function showPage ({
context, context = {},
runtime,
url, url,
data = {}, data = {},
style = {}, style = {},
onMessage, onMessage,
onClose 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 // eslint-disable-next-line
weex_ = typeof weex === 'object' ? weex : null; plus_ = context.plus || plus;
// eslint-disable-next-line // eslint-disable-next-line
uni_ = typeof uni === 'object' ? uni : null; BroadcastChannel_ = context.BroadcastChannel || BroadcastChannel;
}
if (runtime) {
setRuntime(runtime);
} else {
runtime = getRuntime();
}
const titleNView = { const titleNView = {
autoBackButton: true, autoBackButton: true,
titleSize: '17px' titleSize: '17px'
...@@ -4261,7 +4227,7 @@ var serviceContext = (function () { ...@@ -4261,7 +4227,7 @@ var serviceContext = (function () {
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
} }
...@@ -4270,7 +4236,7 @@ var serviceContext = (function () { ...@@ -4270,7 +4236,7 @@ var serviceContext = (function () {
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
} }
}); });
...@@ -11498,7 +11464,13 @@ var serviceContext = (function () { ...@@ -11498,7 +11464,13 @@ var serviceContext = (function () {
}); });
}); });
plus.globalEvent.addEventListener('plusMessage', function (e) { plus.globalEvent.addEventListener('plusMessage', onPlusMessage$1);
// nvue webview post message
plus.globalEvent.addEventListener('WebviewPostMessage', onPlusMessage$1);
}
function onPlusMessage$1 (e) {
if (process.env.NODE_ENV !== 'production') { if (process.env.NODE_ENV !== 'production') {
console.log('[plusMessage]:[' + Date.now() + ']' + JSON.stringify(e.data)); console.log('[plusMessage]:[' + Date.now() + ']' + JSON.stringify(e.data));
} }
...@@ -11506,7 +11478,6 @@ var serviceContext = (function () { ...@@ -11506,7 +11478,6 @@ var serviceContext = (function () {
const type = e.data.type; const type = e.data.type;
consumePlusMessage(type, e.data.args || {}); consumePlusMessage(type, e.data.args || {});
} }
});
} }
function initAppLaunch (appVm) { function initAppLaunch (appVm) {
...@@ -12234,7 +12205,7 @@ var serviceContext = (function () { ...@@ -12234,7 +12205,7 @@ var serviceContext = (function () {
renderWatcher && renderWatcher &&
this._$queue.find(watcher => renderWatcher === watcher) this._$queue.find(watcher => renderWatcher === watcher)
) { ) {
vdSyncCallbacks.push(cb); vdSyncCallbacks.push(cb.bind(this));
} else { } else {
// $nextTick bind vm context // $nextTick bind vm context
Vue.nextTick(() => { Vue.nextTick(() => {
......
...@@ -52,7 +52,7 @@ export default { ...@@ -52,7 +52,7 @@ export default {
renderWatcher && renderWatcher &&
this._$queue.find(watcher => renderWatcher === watcher) this._$queue.find(watcher => renderWatcher === watcher)
) { ) {
vdSyncCallbacks.push(cb) vdSyncCallbacks.push(cb.bind(this))
} else { } else {
// $nextTick bind vm context // $nextTick bind vm context
Vue.nextTick(() => { Vue.nextTick(() => {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册