我正在尝试创建一个监视网页中某些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的原型会导致错误。
答案 0 :(得分: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);"
];
...
答案 1 :(得分: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在帧中始终为零!