Я занимаюсь веб-разработкой с помощью Android (не укоренившегося) телефона и ищу метод для отображения консольных сообщений браузера (Chrome или Firefox). Ни у Android Chrome, ни у Firefox нет веб-инспектора/консоли, и я не нашел Firefox (рабочий) надстройкой.
Обновление: я не могу подключить свой телефон к компьютеру (ADB, удаленный инструмент Chrome... недоступен).
Кто-нибудь может намекнуть мне жизнеспособное решение?
Я не нашел решение "просто работать" для решения моей проблемы, поэтому я сделал небольшой инструмент для отправки журналов и ошибок из браузера на серверный сервер.
Он использует прокси -сервер вокруг объекта window.console и реализует функцию window.onerror для отправки сообщений на сервер.
Я структурировал код, чтобы использовать его как промежуточное ПО expressjs для повторного использования. Он не идеален и может быть несовместим со всеми браузерами, но он действительно помогает, если в браузере нет инструментов dev.
Любой может проверить его через repl.it.
// Use this module as middleware with expressjs compatible server:
//
// In the server:
// consoleWrapperMiddleware(basePath, app)
// basePath: URL path to send browser messages
// app: expressjs application reference
// return: nothing
//
// In the html page:
// <script src="basePath" />
// basePath: URL path to send browser messages
function consoleWrapper(oldConsole, oldOnerror, serverUrl) {
function _post(log) {
const req = new XMLHttpRequest()
req.open('POST', serverUrl, true)
req.setRequestHeader('Content-Type', 'application/json')
req.send(JSON.stringify(log))
}
const console = new Proxy(oldConsole, {
get: (target, propKey, receiver) => {
const origMethod = target[propKey]
return function (...args) {
if (origMethod === undefined) {
const message = 'unknown console method: '+propKey
_post({ level: 'wrap', message: [message]})
return message
}
else {
let result = origMethod.apply(this, args)
_post({ level: origMethod.name, message: args })
return result
}
}
}
})
const onerror = function(msg, url, line, col) {
if (typeof oldOnerror === 'function')
oldOnerror(arguments)
const content = [ msg, url+':'+line+':'+col ]
_post({ level: 'js-err', message: content })
}
return [ console, onerror ]
}
function consoleWrapperMiddleware(basePath, app) {
app.get(basePath, (req, res) => {
res.status(200).send('[ window.console, window.onerror ] = '+consoleWrapper.toString()+'(window.console, window.onerror, location.protocol.concat("//").concat(location.host).concat("'+basePath+'"))')
console.log('Console wrapper sent')
})
app.post(basePath, (req, res) => {
let body = []
req.on('data', (chunk) => {
body.push(chunk)
}).on('end', () => {
body = Buffer.concat(body).toString()
const logMsg = JSON.parse(body)
console.log('['+logMsg.level+']', ...logMsg.message)
res.writeHead(200)
res.end()
})
})
console.log('Log server listening from',basePath)
}
module.exports = consoleWrapperMiddleware