【发布时间】:2019-08-27 01:38:11
【问题描述】:
我正在编写一个 chrome 扩展程序,它基本上将响应传输到我的本地服务器。
要运行这段代码,我只需要打开检查窗口(这样我就可以使用 devtools)。
它完美地运行了几个小时,但我发现它最终关闭了检查窗口,没有任何错误或生成任何日志。受监控的站点每小时给出一个响应,我刚刚在 Chrome 检查控制台中记录了“OK”。我会看到 OK 的计数在几个小时内增长到超过 15k,但它会使检查窗口关闭。 Chrome 和目标网站将永远存在。
此外,如果我再次打开检查窗口,我的代码将继续工作几个小时。
所以也许我的内存用完了。如何防止检查窗口关闭?或者至少我怎样才能得到它正在关闭的消息。反正有没有不用人工操作就可以重新打开?
实际上,检查窗口在发送 10k 响应之前不会关闭。因此,如果扩展程序可以关闭并重新打开检查窗口,也应该使我的代码永久运行。
顺便说一句,清除控制台日志并不能阻止意外关闭。
以下是我正在运行的代码。
chrome.devtools.network.onRequestFinished.addListener(request => {
request.getContent((body) => {
if (request.request && request.request.url) {
if (body.includes('SomeTag')) {
var http = new XMLHttpRequest();
var url = 'http://localhost:13345/testing';
http.open('POST', url, true);
http.setRequestHeader('Content-type', 'plain/text; charset="UTF-8');
http.onreadystatechange = function () {
if (http.readyState == 4 && http.status == 200) {
chrome.devtools.inspectedWindow.eval('console.log("' + http.responseText + '")');
}
}
for (var i = 0; i < request.response.headers.length; i++) {
if (request.response.headers[i].name == 'Date') {
http.send(request.response.headers[i].value + '\n' + body);
break;
}
}
}
}
});
});
【问题讨论】:
-
听起来像是代码中的内存泄漏问题,因此请尝试 debugging it 或 devtools 中的控制台日志溢出问题,因此请尝试完全不使用它(在面板 DOM 中执行输出)或少用它经常。
标签: google-chrome google-chrome-extension google-chrome-devtools