nw core index.js
wechat_devtools_1.02.1904090/Contents/Resources/package.nw/js/core/index.js
const path = require('path')
const tools = require('../js/84b183688a46c9e2626d3e6f83365e13.js')
const locales = require('../js/common/locales/index.js')
const isMac = (process.platform === 'darwin')
const query = tools.getQuery(location.search)
// 记录工具开始运行的时间
global.beginTime = Date.now()
function hack() {
// to prevent drag image or html
document.body.addEventListener('dragover', function (e) {
e.preventDefault()
e.stopPropagation()
}, false)
document.body.addEventListener('drop', function (e) {
e.preventDefault()
e.stopPropagation()
}, false)
// 禁用滚轮缩放
document.addEventListener('mousewheel', (event) => {
if (event.ctrlKey) event.preventDefault()
})
}
function initGlobal() {
global.appVersion = nw.App.manifest.version
global.useChromeRemoteDebugProtocal = false
// mac 从application 启动时带的环境变量里没有 :/usr/local/bin
isMac && (process.env.PATH += ':/usr/local/bin')
// 在非 new instance 的窗口内可以共享
global.shareData = {}
global.appConfig = tools.getAppConfig()
// global.appConfig.isDev = false
// global.appConfig.isGamma = true
// nw & foreground variables
const Win = nw.Window.get()
global.Win = Win
global.contentDocument = document
global.contentDocumentBody = document.body
global.contentWindow = window
global.windowMap = new Map()
global.windowMap.set('LOGIN', global.Win)
// worker 懒加载
global.worker = {}
Object.defineProperties(global.worker, {
bbsLogWorker: {
get() {
if (!this._bbsLogWoker) {
this._bbsLogWoker = new Worker('../js/2bc74df4df155a7d0d1c4df1e947d57d.js')
}
return this._bbsLogWoker
},
},
})
// 提供一个全局 reload 的方法
global.reload = () => {
for (key in require.cache) {
require.cache[key] = undefined
}
location.reload()
}
global.devInfo = {}
if (location.search) {
global.isDevWindow = true
global.devType = location.search.match(/devtype=(.*?)(&|$)/)[1]
switch (global.devType) {
case 'webdebugger': {
global.devInfo.id = query.devid
break
}
default: {
global.devInfo.id = query.devid
global.devInfo.appid = query.appid
global.devInfo.projectname = query.projectname
global.devInfo.projectpath = query.projectpath
global.devInfo.projectid = query.projectid
global.devInfo.isTemp = Boolean(query.isTemp)
global.devInfo.isOnline = Boolean(query.isOnline)
if (global.devInfo.isTemp) {
const tempLocalStorageKey = `temp_${global.devInfo.appid}_${global.devInfo.projectname}`
global.devInfo.project = JSON.parse(localStorage[tempLocalStorageKey])
delete localStorage[tempLocalStorageKey]
}
}
}
if (query.simple) {
// 多账号模式登录
global.isSimple = true
global.userInfo = {
openid: query.openid,
nickName: query.nickName,
headUrl: query.headUrl,
contry: query.contry,
city: query.city,
loginStatus: query.loginStatus,
province: query.province,
sex: query.sex,
newticket: query.newticket,
ticketExpiredTime: parseInt(query.ticketExpiredTime),
signature: query.signature,
signatureExpiredTime: parseInt(query.signatureExpiredTime)
}
}
}
// parse cli
global.CLI = {}
try {
global.CLI.isTestMode = nw.App.argv.indexOf('--test-mode') > -1
global.autoTest = global.CLI.isTestMode
if (nw.App.argv.indexOf('--only-simulator') > -1) {
global.onlySimulator = true
}
if (nw.App.argv.indexOf('--online') > -1) {
global.online = true
}
if (global.CLI.isTestMode) {
const ind = nw.App.argv.indexOf('--id')
if (ind > -1) {
const raw = nw.App.argv[ind + 1]
if (raw) {
global.CLI.id = raw
}
}
}
require('../js/09495074395d0f72e0c2a4eb13e1076c.js')
} catch (err) {
console.error('init global caught error: ', err)
}
}
function initMenu() {
// init initial menu in case of failure
try {
if (global.isDevWindow || isMac) {
const menu = new nw.Menu({type: 'menubar'})
const ideMenu = new nw.Menu()
const debugMenu = new nw.Menu()
if (global.isDevWindow) {
debugMenu.append(new nw.MenuItem({
label: locales.config.MENU_INSPECT_APP,
click: () => global.Win.showDevTools(),
}))
} else {
debugMenu.append(new nw.MenuItem({
label: locales.config.MENU_INSPECT_APP,
click: () => {
chrome.developerPrivate.openDevTools({
renderViewId: -1,
renderProcessId: -1,
extensionId: chrome.runtime.id
})
},
}))
}
ideMenu.append(new nw.MenuItem({
label: locales.config.MENU_INSPECT,
submenu: debugMenu,
}))
ideMenu.append(new nw.MenuItem({
label: locales.config.CLOSE_WINDOW,
click: () => global.Win.close(true),
}))
ideMenu.append(new nw.MenuItem({
label: locales.config.MENU_EXIT,
click: () => nw.App.quit(),
}))
menu.append(new nw.MenuItem({
label: locales.config.MENU_TITLE_APP,
submenu: ideMenu,
}))
global.Win.menu = menu
}
} catch (err) {}
}
function init() {
const Win = global.Win
Win.on('new-win-policy', (frame, url, policy) => {
policy.ignore()
})
Win.on('close', () => {
// make all webviews invisible
const webviews = document.querySelectorAll('webview')
for (const webview of webviews) {
try {
webview.style.display = 'none'
} catch (e) {
// nothing to do
}
}
global.windowMap.forEach((win) => {
try {
if (win !== Win) {
win.close(true)
}
} catch (e) {}
})
global.windowMap.clear()
if (global.isDevWindow) {
// dev window
const clientWindowSync = require('../js/881e653f19d837f2408386047cb8c38c.js')
clientWindowSync.notifyCloseWindow()
// 先隐藏, 可能需要处理一些事情,比如上报之后再真正关闭
// 如果直接 Win.close(true), 别的地方的 Win.on('close') 是不会收到调用的
Win.hide()
setTimeout(() => {
Win.close(true)
}, 1000)
} else {
// original main window
const serverWindowSync = require('../js/b543ae2da406cea63b3ad8951f17b6c0.js')
if (serverWindowSync.clientWindows.size > 0) {
Win.hide()
} else {
// 几秒之后项目窗口数还是 0 说明没有正在打开的窗口了,可以正常退出
Win.hide()
setTimeout(() => {
if (serverWindowSync.clientWindows.size === 0) {
tools.quit()
}
}, 2000)
}
}
})
// 打开 inspect 窗口
if (nw.App.argv.indexOf('inspect') !== -1) {
tools.openInspectWin()
}
// enter background
if (query.simple) {
require('../js/8524207e9ea0bd06cec5e97c74bd6b7d.js')
} else {
const observer = require('../js/5f3c86137d346ddffec99d08c1ac2bb0.js').default
observer.start()
require('../js/29cbb96f0d87ca0a3ee63c5dbbd8107c.js')
}
}
hack()
initGlobal()
initMenu()
if (!global.isDevWindow && !global.online) {
const checkUpdate = require('../js/e5184416014aff2809a9dee32cc447c8.js')
const idepluginUpdater = require('../js/8a1cb9f18551c9fced04d3b87ddfa687.js')
checkUpdate.loop()
// 更新/下载插件
idepluginUpdater.loop()
// 检查是否需要更新
tools.checkUpdateApp()
.then(() => {
init()
})
} else {
init()
}
============= End
来源:oschina
链接:https://my.oschina.net/u/4294880/blog/4262057