你会钩吗;“低水平”;在javascript中调用,以便记录执行情况?
假设我希望能够检测是否有人调用以下方法:你会钩吗;“低水平”;在javascript中调用,以便记录执行情况?,javascript,google-chrome-extension,Javascript,Google Chrome Extension,假设我希望能够检测是否有人调用以下方法: document.querySelectorAll('input'); 我是否可以挂接此调用,以便在我的上下文中加载任何其他脚本时,我可以记录其执行情况 上下文:我正在考虑通过chrome扩展减轻浏览器中人攻击的方法,功能挂钩是我想到的一件事 巧妙地演示了我可以挂接一个调用以供自己使用,但显然其他脚本将不得不使用我的挂接函数,这会破坏我所追求的功能。我希望能够将document.querySelectorAll()挂接在所有其他脚本都不可见地使用它的级
document.querySelectorAll('input');
我是否可以挂接此调用,以便在我的上下文中加载任何其他脚本时,我可以记录其执行情况
上下文:我正在考虑通过chrome扩展减轻浏览器中人攻击的方法,功能挂钩是我想到的一件事
巧妙地演示了我可以挂接一个调用以供自己使用,但显然其他脚本将不得不使用我的挂接函数,这会破坏我所追求的功能。我希望能够将document.querySelectorAll()
挂接在所有其他脚本都不可见地使用它的级别上
[编辑]
补充资料
具体来说,我正在寻找一种能够检测何时document.querySelectorAll('input')代码>被调用,在我上下文中的任何位置,句号。本例中的上下文将是一个加载了多个脚本的页面
作为记录,我非常确定,如果不修改运行在其上的解释器,就无法通过javascript单独完成这项工作 您可以像用户土地对象一样覆盖主机/本机对象
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);
我强烈怀疑这需要修改浏览器的解释器,但是javascript是一个动态的野兽,谁知道呢?所以你想为其他人钩住querySelectorAll
,并使用原始的querySelectorAll
你自己的代码?对吗?这就是我认为你想要的,但似乎与“…其他脚本必须使用我的钩子函数,这会破坏我想要的。”你能给出一个逐步的例子吗?@apsillers,更新了这个问题。你所问的不是不可能的,但我不知道拦截每个调用如何防止MITM…?搜索猴子修补JavaScript的示例。这就像玩火一样,如果我在写一个别人会用到的图书馆,我永远不会这么做。如果只是为了你的站点,那么你只会冒着被击中自己脚的风险。不幸的是,没有办法做到这一点,也无法保证你的钩子在页面开始执行脚本之前就已经就位。