我正在尝试创建一个工具来监视网页中某些 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 的原型会导致错误。