你能在javascript中挂钩“低级”调用,以便你可以记录执行吗?

时间:2014-11-18 16:38:42

标签: javascript google-chrome-extension

说我希望能够检测是否有人调用以下方法:

document.querySelectorAll('input');

我可以挂钩此调用,以便在我的上下文中加载任何其他脚本时,我可以记录它的执行吗?

背景信息:我正在考虑通过chrome扩展来缓解浏览器攻击中的人的方法,并且功能挂钩是我想到的一件事。

This question巧妙地证明了我可以为自己的用途挂钩,但显然其他脚本必须使用我的钩子函数,这会使我失去的东西失败。我希望能够将document.querySelectorAll()挂钩到所有其他脚本无形中使用它的级别。

[编辑] 其他信息

具体来说,我正在寻找一种能够在我的上下文,句点中的任何地方检测到document.querySelectorAll('input');被调用的方法。在这种情况下,上下文将是一个已导入多个脚本的加载页面。

为了记录,我非常确定这不能仅通过javascript完成,而无需修改其运行的解释器。

1 个答案:

答案 0 :(得分:1)

您可以像用户对象一样覆盖主机/本机对象。

var $ = document.querySelectorAll;

document.querySelectorAll = function () {
  console.log('Selecting elements', arguments); 
  return $.apply(document, arguments);
};

简单地将此代码段放在内容脚本中是不行的,因为内容脚本在隔离范围内运行,并且由它们设置的任何变量对其他脚本不可见。您必须将此脚本附加到DOM,以便其他脚本使用重写的函数。

var script = document.createElement('script');
script.textContent = '(' + overriddenFunction ')()';
document.head.appendChild(script);