1

我正在尝试创建一个工具来监视网页中某些 JavaScript API 的使用情况。我的计划是覆盖 JavaScript API,将调用信息存储到全局变量中,然后通过 postMessage 将其发送到内容脚本。但是,将类似下面的代码注入网页会导致“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);"

代码,我不确定你想要实现什么!

我希望您知道除非关闭窗口,否则 Counter 在帧中始终为零!

于 2013-03-04T11:41:01.880 回答