0

私は次の非常に単純なモカ/チャイテストを持っています:

describe('main tests', function () {
  var expect = chai.expect, something = null;

  before(function () {
    something = 0;
  });

  it('should equal 0', function () {
    expect(something).to.equal(0);
  });
});

これは次の出力でクロームで失敗します:

エラー:グローバルリークが検出されました:css、cssFile、cssRule

FirefoxとSafariの両方で、問題なく合格します。

Google独自のスクリーンキャプチャ拡張機能によって定義された別のグローバル変数がありました。cssその拡張機能を無効にすると、Mochaは、、、cssFileおよびcssRuleグローバルリークについてのみ不平を言いました。

チェックしたところ、これらの変数はSafariまたはFirefoxで定義されていないため、ChromeまたはChrome拡張機能の1つで、これら3つの変数が定義されていることは明らかです。すべての変数を順番に無効にしてから再度有効にする以外に、どの拡張機能がこれらの変数を定義しているかを把握する方法はありますか?

4

2 に答える 2

1

問題の最善の解決策は、JavaScriptスニペットではなく、インストールされている拡張機能のソースコードです。

  1. ChromeプロファイルExtensionsのサブディレクトリ(以下の場所)にアクセスします。
  2. ツールを使用して、用語を再帰的に検索します。
    たとえば、次のgrepコマンドを使用します:grep -r 'cssFile'(Linux、Mac、さらにはWindowsで使用可能)。

プロファイルのChrome拡張機能のデフォルトの場所

Windows XP:
  Chrome  : %AppData%\..\Local Settings\Application Data\Google\Chrome\User Data\Default\Extensions\
  Chromium: %AppData%\..\Local Settings\Application Data\Chromium\User Data\Default\Extensions\

Windows Vista/7/8:
  Chrome  : %LocalAppData%\Google\Chrome\User Data\Default\Extensions\
  Chromium: %LocalAppData%\Chromium\User Data\Default\Extensions\

Linux:
  Chrome  : ~/.config/google-chrome/Default/Extensions/
  Chromium: ~/.config/chromium/Default/Extensions/

Mac OS X:
  Chrome  : ~/Library/Application Support/Google/Chrome/Default/Extensions/
  Chromium: ~/Library/Application Support/Chromium/Default/Extensions/
于 2012-12-15T21:13:43.963 に答える
0

さて、私はすべての拡張機能を無効にすることをしました。ChromeSnifferが原因のようです。具体的には、次のコード(detector.js)で:

for (t in cssClasses) {
    // snipped for brevity
    for(css in cssClasses[t]) {
        // snipped for brevity
        for(cssFile in document.styleSheets) {
            for(cssRule in document.styleSheets[cssFile].cssRules) {
                // snipped for brevity
            }
        }
    }
}

それは、、、、およびグローバルスコープにリークtします。これに最初に気付いたのは私ではないようです:https ://github.com/nqbao/chromesniffer/pull/51csscssFilecssRule

手動プロセスを回避できた方法で誰かが答えたい場合は、あなたの答えを受け入れます。

于 2012-12-15T21:10:38.183 に答える