1

Web ページでの JavaScript API の使用状況を監視するツールを作成しようとしています。私の計画は、JavaScript API をオーバーライドし、呼び出し情報をグローバル変数に保存してから、postMessage を介してコンテンツ スクリプトに送信することです。ただし、以下のようなコードを Web ページに挿入すると、「Aw Snap」エラーが発生します。

chrome.devtools.panels.create("Test Dev Panel",
  "icon.png",
  "panel.html",
  function (panel) {
    var code = [ 
        "window.counter = 0;",
        "Array.prototype.push = function () {",
          "window.counter++;",
        "}",
        "window.addEventListener('message', function(event) {",
          "window.postMessage('Array.push() has been called ' + window.counter + ' times.', '*');",
        "}, false);"
      ];

    chrome.devtools.inspectedWindow.reload({
      injectedScript: code.join('')
    });
...
  });

セキュリティ上の制限である可能性があります。しかし、私の目標を達成する方法はありますか?

--- 更新 --- postMessage() 呼び出しを削除すると、エラーは発生しません。また、Array.prototype オーバーライド コードを削除しても問題はありません。postMessage() の呼び出しと Array のプロトタイプの上書きを同時に行うと、エラーが発生するようです。

4

2 に答える 2

1

Array.prototype.push の後の構文エラーです。

セミコロンで行を終了する必要があります。

...
var code = [ 
        "window.counter = 0;",
        "Array.prototype.push = function () {",
          "window.counter++;",
        "};", //<-- Here
        "window.addEventListener('message', function(event) {",
          "window.postMessage('Array.push() has been called ' + window.counter + ' times.', '*');",
        "}, false);"
      ];
...
于 2014-03-17T16:49:58.653 に答える
0

問題は

"window.counter = 0;",
"Array.prototype.push = function () {",
"window.counter++;",
"}",
"window.addEventListener('message', function(event) {",
"window.postMessage('Array.push() has been called ' + window.counter + ' times.', '*');",
"}, false);"

コード、私はあなたが何を達成したいのかわかりません!!

ウィンドウを閉じない限り、カウンターはフレーム内で常にゼロであるという事実を認識していただければ幸いです。

于 2013-03-04T11:41:01.880 に答える