2

私はどこからともなくクラッシュするChrome拡張機能を持っているので、ログをアクティブにすることでChromeをデバッグできることを確認しました。それが私が行ったことです。クラッシュが発生する前に、次のエラーがスローされることに気付きました。 webRequestInternal.eventHandled:レンダラーを終了しています。 "したがって、このエラーはwebRequestsリスナーの1つで発生する可能性があります。しかし、私はそれを正しくするためにもう何をすべきかわかりません。

これは、関数が閉じる前に発生するログエラーです。

[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

そして、私のアプリケーションでは、多くのWebリクエストを作成しましたが、もう何をすべきかわかりません:/このクラッシュをスローする可能性があるのは何ですか?

前もって感謝します。

4

1 に答える 1

2

答えを見つけることができました。問題は、要求ヘッダーに必要な情報が欠落している場合、エラーを報告する代わりにクラッシュすることです。

私の details.requestHeader は name 属性のみで value 属性を持たない Cookie を返していたので、value 属性を追加するとクラッシュはなくなります。

Cookie オブジェクトは次のようになります。

{ name: "key", value: "val"}

{name: "key"}未定義の値を追加していたので生成していましたが、使用した後JSON.Stringify(details.requestHeaders)、それが欠落していて問題が解決したことがわかりました。

空の文字列または必要なものを追加するだけの場合は、Cookie の値が未定義でないことを確認する必要がありました。

于 2012-08-27T01:29:35.393 に答える