WebView:使服务工作者的console.log输出在logcat中可见

时间:2017-11-03 09:33:18

标签: javascript android webview

调试在WebView中运行的javascript非常方便,通过向WebChromeClient添加WebView(请参阅here),console.log() {} javascript的输出在logcat中可见。

但似乎当您的网页使用service worker时,服务工作者的任何console.log()输出都会而不是进入logcat。

有没有办法让这种情况发生?

1 个答案:

答案 0 :(得分:1)

我不确定这是否是最好的方法,但它有点适用于我的目的。它涉及从服务工作者向其控制的每个页面发送消息,在服务工作者中使用以下功能:

const sendMessageToPage = function (message) {
    return self.clients.matchAll().then(clients => {
        return Promise.all(clients.map(client => {
            return client.postMessage('(service worker message) ' + message);
        }));
    });
};

然后在受控页面(html)中,当您从服务工作人员那里收到消息时,您只需console.log

navigator.serviceWorker.onmessage = function (event) {
    console.log(event.data);
};

然后来自页面的console.log消息在logcat中可见。

我可以看到的主要缺点是从服务工作者记录的消息不一定是严格的时间顺序与直接记录在页面中的消息,但这对我来说并不是真正的问题。

很想找到更好的方式......