@dcloudio/uni-debugger
Version:
uni-app debugger
147 lines (139 loc) • 3.65 kB
JavaScript
var __channelId__
var ___shouldReturnResult__ = false
var __requestId__
// The argument maybe an undefine value
var __protectedAragument__ = function(arg) {
var args = Array.prototype.slice.call(arg)
for (var i = 0; i < args.length; i++) {
if (!args[i]) {
args[i] = ''
}
}
return args
}
var __postData__ = function(payload) {
if (payload.method === 'WxDebug.callCreateBody' && !payload.params.domStr) {
return
}
try {
__postmessage__(payload)
} catch (e) {
self.console.warn(`CallNative with some non-json data:`, payload)
payload = JSON.parse(JSON.stringify(payload))
__postmessage__(payload)
}
}
__eventEmitter__.on('WxDebug.callJS', function(data) {
var method = data.params.method
if (method === 'importScript') {
importScripts(data.params.sourceUrl)
} else if (method === 'destroyInstance') {
// close worker
self.destroyInstance(data.params.args[0])
self.console.log('destroy')
} else if (self[method]) {
self[method].apply(null, data.params.args)
} else {
self.console.warn(
'call [' + method + '] error: jsframework has no such api',
)
}
})
__eventEmitter__.on('WxDebug.changeLogLevel', function(message) {
self.WXEnvironment.logLevel = message.params
})
__eventEmitter__.on('Console.messageAdded', function(message) {
self.console.error('[Native Error]', message.params.message.text)
})
__eventEmitter__.on('WxDebug.importScript', function(message) {
if (message.params.sourceUrl) {
importScripts(message.params.sourceUrl)
} else {
new Function('', message.params.source)()
}
})
__eventEmitter__.on('WxDebug.initWorker', function(message) {
var createWeexBundleEntry = function(sourceUrl) {
var code = ''
if (self.$$frameworkFlag[sourceUrl] || self.$$frameworkFlag['@']) {
code += `// { "framework": "${self.$$frameworkFlag[sourceUrl] ||
self.$$frameworkFlag['@']}" }\n`
}
code += '__weex_bundle_entry__('
injectedGlobals.forEach(function(g, i) {
code += 'typeof ' + g + '==="undefined"?undefined:' + g
if (i < injectedGlobals.length - 1) {
code += ','
}
})
// Avoiding the structure of comments in the last line causes `}` to be annotated
code += '\n);'
return code
}
var injectedGlobals = [
'Promise',
// W3C
'window',
'weex',
'service',
'Rax',
'services',
'global',
'screen',
'document',
'navigator',
'location',
'fetch',
'Headers',
'Response',
'Request',
'URL',
'URLSearchParams',
'setTimeout',
'clearTimeout',
'setInterval',
'clearInterval',
'requestAnimationFrame',
'cancelAnimationFrame',
'alert',
// ModuleJS
'define',
'require',
// Weex
'bootstrap',
'register',
'render',
'__d',
'__r',
'__DEV__',
'__weex_define__',
'__weex_require__',
'__weex_viewmodel__',
'__weex_document__',
'__weex_bootstrap__',
'__weex_options__',
'__weex_data__',
'__weex_downgrade__',
'__weex_require_module__',
'Vue',
]
var url = message.params.sourceUrl
__channelId__ = message.channelId
for (var key in message.params.env) {
if (message.params.env.hasOwnProperty(key)) {
self[key] = message.params.env[key]
}
}
if (message.params.jsservice) {
message.params.jsservice.forEach(function(script) {
importScripts(script)
})
}
__rewriteLog__(message.params.env.WXEnvironment.logLevel)
self.createInstance(
message.params.args[0],
createWeexBundleEntry(url),
message.params.args[2],
message.params.args[3],
)
})