说我希望能够检测是否有人调用以下方法:
document.querySelectorAll('input');
我可以挂钩此调用,以便在我的上下文中加载任何其他脚本时,我可以记录它的执行吗?
背景信息:我正在考虑通过chrome扩展来缓解浏览器攻击中的人的方法,并且功能挂钩是我想到的一件事。
This question巧妙地证明了我可以为自己的用途挂钩,但显然其他脚本必须使用我的钩子函数,这会使我失去的东西失败。我希望能够将document.querySelectorAll()
挂钩到所有其他脚本无形中使用它的级别。
[编辑] 其他信息
具体来说,我正在寻找一种能够在我的上下文,句点中的任何地方检测到document.querySelectorAll('input');
被调用的方法。在这种情况下,上下文将是一个已导入多个脚本的加载页面。
为了记录,我非常确定这不能仅通过javascript完成,而无需修改其运行的解释器。
答案 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);