我有一个 chrome 扩展突然崩溃了,所以我看到你可以通过激活日志记录来调试你的 chrome,所以这就是我所做的,我注意到在崩溃发生之前,它抛出了一个错误:“错误的扩展消息 webRequestInternal.eventHandled : 正在终止渲染器。”,因此此错误可能发生在 webRequests 监听器之一中。但我不知道该怎么做才能使它正确。
这是函数关闭之前发生的日志错误:
[1888:3844:17965500:ERROR:extension_function.cc(143)] bad extension message webRequestInternal.eventHandled : terminating renderer.
[1888:3844:17965625:VERBOSE1:web_request_time_tracker.cc(181)] WR percent 2643: http://mypage.com/test: = 0.985185
[1888:3844:17965625:VERBOSE1:web_request_time_tracker.cc(181)] WR percent 2644: http://mypage.com/test: 123/123 = 1
[1888:3464:17965734:VERBOSE1:speech_input_extension_manager.cc(228)] Extension unloaded. Requesting to enforce stop...
我有 2 个 webRequest 监听器:
OnBeforeRequest 页面阻塞:
chrome.webRequest.onBeforeRequest.addListener(blockURLs,
{urls: ["http://*\/*", "https://*\/*"]}, //I have to use all because I use specific page filters
["blocking"]
);
function blockURLs(details){
var url = details.url.split('/');
if(STRING_OF_SERVERS.indexOf(url[2]) < 0 || details.url.indexOf('.css') > -1 )
return {cancel: true};
}
还有 onBeforeSendHeaders (这可能是一个错误):
chrome.webRequest.onBeforeSendHeaders.addListener(
function(details) {
var cookie_found = false;
for (var i = 0; i < details.requestHeaders.length; ++i) {
if (details.requestHeaders[i].name === 'Cookie') {
//details.requestHeaders.splice(i,1); //,localStorage['COOKIES']
//alert("ADDED: " + localStorage['COOKIES']);
if(window['SERVIDOR_TEMP_DATA_' + SERVER_INDEX]['COOKIES'] != ''){
details.requestHeaders[i] = new Object();
details.requestHeaders[i].name = 'Cookie';
details.requestHeaders[i].value = window['SERVIDOR_TEMP_DATA_' + SERVER_INDEX]['COOKIES'];
}else{
window['SERVIDOR_TEMP_DATA_' + SERVER_INDEX]['COOKIES'] = details.requestHeaders[i].value;
cookie_found = true;
break;
}
}
if(cookie_found == false && window['SERVIDOR_TEMP_DATA_' + SERVER_INDEX]['COOKIES'] != ''){
var i = details.requestHeaders.length;
details.requestHeaders[i] = new Object();
details.requestHeaders[i].name = 'Cookie';
details.requestHeaders[i].value = window['SERVIDOR_TEMP_DATA_' + SERVER_INDEX]['COOKIES'];
}
//console.log(details.url);
//console.log(details.requestHeaders);
return {requestHeaders: details.requestHeaders};
},
{urls: URLS_TYPE, types : ["main_frame", "sub_frame", "xmlhttprequest", "object", "stylesheet", "script", "image", "other"]},
["blocking", "requestHeaders"]);
//StartClicking();
});
未指定的变量:
*var URLS_TYPE is an array of Sites allowed
*var STRING_OF_SERVERS is a String containing all the possible combination of sites that are allowed
在我的应用程序中,我发出了很多网络请求,但我不知道该怎么办了:/ 可能是什么导致了这次崩溃?
提前致谢。
最佳答案
我找到了答案。 问题是,如果请求 header 缺少任何所需的信息,它只会崩溃而不是报告错误。
我的details.requestHeader返回一个只有名称而没有值属性的cookie,所以如果我添加值属性,崩溃就会消失。
Cookie 对象应该是这样的:
{ name: "key", value: "val"}
由于我添加了一个未定义的值,所以我只生成了{name: "key"}
,在我使用JSON.Stringify(details.requestHeaders)
之后,我可以发现它丢失了,现在问题已解决。
我只需确保 cookie 值不是未定义的,如果它只是添加一个空字符串或您想要的任何内容。
关于google-chrome - Chrome 扩展程序崩溃并显示 "bad extension message webRequestInternal.eventHandled",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12129217/