Javascript 网站能否知道我是否正在运行用户脚本?
例如,Facebook.com能否在我的浏览器上运行一个版本控制脚本,并找出我是否正在使用脚本运行经过修改的HTML代码Javascript 网站能否知道我是否正在运行用户脚本?,javascript,facebook,greasemonkey,userscripts,tampermonkey,Javascript,Facebook,Greasemonkey,Userscripts,Tampermonkey,例如,Facebook.com能否在我的浏览器上运行一个版本控制脚本,并找出我是否正在使用脚本运行经过修改的HTML代码 这可以通过一个脚本来完成吗?该脚本可以读取缓存中的HTML代码,并生成某种散列标记,然后将其发送回服务器,并与发送到客户端的代码进行比较 是的,从理论上讲,站点可以推断脚本在各种情况下的存在 这并不是万无一失的,而且通常对于站点的可忽略的“威胁”来说太麻烦了。(再说一次,有些网站管理员可能会对这些事情产生偏执狂。) 某些方法,具体取决于脚本的作用(无特定顺序): 游戏或拍卖网
这可以通过一个脚本来完成吗?该脚本可以读取缓存中的HTML代码,并生成某种散列标记,然后将其发送回服务器,并与发送到客户端的代码进行比较 是的,从理论上讲,站点可以推断脚本在各种情况下的存在 这并不是万无一失的,而且通常对于站点的可忽略的“威胁”来说太麻烦了。(再说一次,有些网站管理员可能会对这些事情产生偏执狂。) 某些方法,具体取决于脚本的作用(无特定顺序):
节点,寻找额外的节点unsafeWindow
然而,最终的优势在于用户脚本编写器。网页采取的任何应对措施都可以在用户端检测到并阻止。即使是定制的、必需的插件或必需的硬件加密狗,也可能被技术娴熟且充满激情的用户破坏。更新:以下方法截至目前完全无效
请参阅(死链接) 用于检测GM是否已安装的Javascript(但不检测脚本是否在该页面上实际运行): 过时的备选方案1:
if (Components.interfaces.gmIGreasemonkeyService) {
alert("I smell a monkey!");
}
过时的备选方案2:
<script type="text/javascript" src="resource://greasemonkey/addons4.js"></script>
<script type="text/javascript">
if (typeof GM_addonsStartup !== "undefined") {
alert("I smell a monkey!");
}
</script>
if(GM_addonStartup的类型!=“未定义”){
警惕(“我闻到了猴子的味道!”);
}
Facebook不是静态HTML,因此哈希是无用的,因此不可能。你有理由相信Facebook正在检测你的用户脚本吗?若然,原因为何?你怎么会怀疑这一点?Facebook并不关心你的用户脚本,事实上,他们频繁的界面更改本身就帮助他们击退了许多用户脚本,尤其是那些没有积极维护的脚本。在Opera中,page现在可以检测假点击(通过。isTrusted
属性),可能很快就可以在其他浏览器中使用它了。@c69,它在IE9中的支持是有限的。@MikeOrtiz,没有。用户脚本本身存在于一个单独的作用域中,页面无法看到——即使在@grant none
模式下。。。如果用户脚本创建
节点,则页面可以看到这些节点的源。@MikeOrtiz,具体取决于。如果需要,请提出一个新问题。请确保包含MCVE。@Edge,不,这不再有效,请参阅更新的答案。