Google chrome 我的Chrome扩展使Chrome inspect窗口自动关闭
我正在编写一个chrome扩展,它基本上将响应传输到本地服务器 要运行这段代码,我只需要打开inspect窗口(这样我就可以让devtools工作) 它完美地运行了几个小时,但我发现它最终关闭了inspect窗口,没有任何错误或生成任何日志。被监控的站点每小时给出一个响应,我刚刚在Chrome inspect控制台上记录了“OK”。我将看到OK的计数在几个小时内增长到15k以上,但它将关闭检查窗口。Chrome和目标网站将永远保持活力 此外,如果我再次打开“检查”窗口,我的代码将继续工作数小时 所以也许我的记忆已经用完了。如何防止检查窗关闭?或者至少我怎样才能得到它正在关闭的消息。有没有不用手动操作就可以重新打开它 实际上,inspect窗口在发送10k响应之前不会关闭。因此,如果扩展可以关闭并重新打开,那么inspect窗口也应该使我的代码永久运行 顺便说一句,清除控制台日志不会停止意外关闭 下面是我正在运行的代码Google chrome 我的Chrome扩展使Chrome inspect窗口自动关闭,google-chrome,google-chrome-extension,google-chrome-devtools,Google Chrome,Google Chrome Extension,Google Chrome Devtools,我正在编写一个chrome扩展,它基本上将响应传输到本地服务器 要运行这段代码,我只需要打开inspect窗口(这样我就可以让devtools工作) 它完美地运行了几个小时,但我发现它最终关闭了inspect窗口,没有任何错误或生成任何日志。被监控的站点每小时给出一个响应,我刚刚在Chrome inspect控制台上记录了“OK”。我将看到OK的计数在几个小时内增长到15k以上,但它将关闭检查窗口。Chrome和目标网站将永远保持活力 此外,如果我再次打开“检查”窗口,我的代码将继续工作数小时
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;
}
}
}
}
});
});
chrome.devtools.network.onRequestFinished.addListener(请求=>{
request.getContent((body)=>{
if(request.request&&request.request.url){
if(body.includes('SomeTag')){
var http=new XMLHttpRequest();
var url='1〕http://localhost:13345/testing';
http.open('POST',url,true);
http.setRequestHeader('Content-type','plain/text;charset=“UTF-8');
http.onreadystatechange=函数(){
如果(http.readyState==4&&http.status==200){
chrome.devtools.inspectedWindow.eval('console.log(“+http.responseText+”);
}
}
for(var i=0;i
您提到清除日志没有帮助,但您是否尝试过根本不登录
我怀疑由于使用chrome.devtools.inspectedWindow.eval(…)
作为日志机制,您的内存可能会不足。如果禁用日志确实解决了问题,但您仍然需要日志记录,您可以通过使用将要登录的消息传递到内容脚本中,该脚本将其添加到页面的日志中
因为我现在耽搁了,所以我冒昧地将您的示例扩展代码转换为应该可以工作的代码。我还没有测试这个端到端,所以您的里程数可能会有所不同
// Copyright 2019 Google LLC.
// SPDX-License-Identifier: Apache-2.0
// manifest.json
{
…
"background": {
"scripts": ["background.js"],
"persistent": false
},
"devtools_page": "devtools.html",
"content_scripts": [{
"matches": ["<all_urls>"],
"js": ["content.js"]
}]
}
// background.js
chrome.runtime.onMessage.addListener(message => {
if (message.name === "log") {
chrome.tabs.sendMessage(message.tabId, message.value);
}
});
// content.js
chrome.runtime.onMessage.addListener(message => {
console.log(message);
});
// devtools.html
<!DOCTYPE html>
<script src="devtools-loader.js"></script>
// devtools.js
chrome.devtools.network.onRequestFinished.addListener(request => {
request.getContent(responseBody => {
if (request.request && request.request.url) {
if (responseBody.includes('SomeTag')) {
let body = '';
for (let header of request.response.headers) {
if (header.name === "Date") {
body = `${header.value}\n${responseBody}`;
break;
}
}
const url = 'http://localhost:13345/testing';
const config = {
method: 'POST',
headers: {
'Content-Type': 'plain/text; charset="UTF-8"',
},
body
};
fetch(url, config)
.then(response => response.text())
.then(responseText => {
const message = {
name: 'log',
tabId: chrome.devtools.inspectedWindow.tabId,
value: responseText,
};
chrome.runtime.sendMessage(chrome.runtime.id, message)
});
}
}
});
});
//版权所有2019谷歌有限责任公司。
//SPDX许可证标识符:Apache-2.0
//manifest.json
{
…
“背景”:{
“脚本”:[“background.js”],
“持续”:假
},
“devtools_页面”:“devtools.html”,
“内容脚本”:[{
“匹配项”:[“”],
“js”:[“content.js”]
}]
}
//background.js
chrome.runtime.onMessage.addListener(消息=>{
如果(message.name==“log”){
chrome.tabs.sendMessage(message.tabId,message.value);
}
});
//content.js
chrome.runtime.onMessage.addListener(消息=>{
控制台日志(消息);
});
//devtools.html
//devtools.js
chrome.devtools.network.onRequestFinished.addListener(请求=>{
request.getContent(responseBody=>{
if(request.request&&request.request.url){
if(responseBody.includes('SomeTag')){
让body='';
for(让request.response.headers的头){
如果(header.name==“日期”){
body=`${header.value}\n${responseBody}`;
打破
}
}
常量url=http://localhost:13345/testing';
常量配置={
方法:“POST”,
标题:{
“内容类型”:“纯/文本;charset=“UTF-8”,
},
身体
};
获取(url,配置)
.then(response=>response.text())
。然后(responseText=>{
常量消息={
名称:“日志”,
tabId:chrome.devtools.inspectedWindow.tabId,
值:responseText,
};
chrome.runtime.sendMessage(chrome.runtime.id,message)
});
}
}
});
});
您提到清除日志没有帮助,但您是否尝试过根本不登录
我怀疑由于使用chrome.devtools.inspectedWindow.eval(…)
作为日志机制,您的内存可能会不足。如果禁用日志确实解决了问题,但您仍然需要日志记录,您可以通过使用将要登录的消息传递到内容脚本中,该脚本将其添加到页面的日志中
因为我现在耽搁了,所以我冒昧地将您的示例扩展代码转换为应该可以工作的代码。我还没有测试这个端到端,所以您的里程数可能会有所不同
// Copyright 2019 Google LLC.
// SPDX-License-Identifier: Apache-2.0
// manifest.json
{
…
"background": {
"scripts": ["background.js"],
"persistent": false
},
"devtools_page": "devtools.html",
"content_scripts": [{
"matches": ["<all_urls>"],
"js": ["content.js"]
}]
}
// background.js
chrome.runtime.onMessage.addListener(message => {
if (message.name === "log") {
chrome.tabs.sendMessage(message.tabId, message.value);
}
});
// content.js
chrome.runtime.onMessage.addListener(message => {
console.log(message);
});
// devtools.html
<!DOCTYPE html>
<script src="devtools-loader.js"></script>
// devtools.js
chrome.devtools.network.onRequestFinished.addListener(request => {
request.getContent(responseBody => {
if (request.request && request.request.url) {
if (responseBody.includes('SomeTag')) {
let body = '';
for (let header of request.response.headers) {
if (header.name === "Date") {
body = `${header.value}\n${responseBody}`;
break;
}
}
const url = 'http://localhost:13345/testing';
const config = {
method: 'POST',
headers: {
'Content-Type': 'plain/text; charset="UTF-8"',
},
body
};
fetch(url, config)
.then(response => response.text())
.then(responseText => {
const message = {
name: 'log',
tabId: chrome.devtools.inspectedWindow.tabId,
value: responseText,
};
chrome.runtime.sendMessage(chrome.runtime.id, message)
});
}
}
});
});
//版权所有2019谷歌有限责任公司。
//SPDX许可证标识符:Apache-2.0
//manifest.json
{
…
“背景”:{
“脚本”:[“background.js”],
“持续”:假
},
“devtools_页面”:“devtools.html”,
“内容脚本”:[{
“匹配项”:[“”],
“js”:[“content.js”]
}]
}
//background.js
chrome.runtime.onMessage.addListener(消息=>{
如果(message.name==“log”){
chrome.tabs.sendMessage(message.tabId,message.value);
}
});
//content.js
chrome.runtime.onMessage.addListener(消息=>{
控制台日志(消息);
});
//devtools.html
//devtools.js
chrome.devtools.network.onRequestFinished.addListener(请求=>{
request.getContent(responseBody=>{
if(request.request&&request.request.url){
if(responseBody.includes(