当试图分析facebook页面的DOM结构时,我尝试使用Greasemonkey实现一些Javascript代码。我包括(通过复制/粘贴)jQuery核心和 UI。我通过Greasemonkey将代码添加到三个站点,在我的PC上的文件上是一个相当空的,然后是“instagaram”-page(仅用于测试)和facebook。我用一个厚红色的格子标记了插入的div,我可以在所有三页上看到它。
$('<div id="draggable2" class="ui-widget-content" style="position:absolute;border:50px solid red;top:0;left:10px;z-index:300;">text1</div>').appendTo('body');
$( "#draggable2" ).click(function() {alert("pallo");});
$(function() {
$( "#draggable2" ).draggable();
});
alert("see if jquery is still there: " + $);
在我的电脑上的测试页面以及可以拖动div的instagram页面上。在Facebook上,我得到了jQuerys .click-Funktion(在这种情况下为“pallo”)引发的“警报”。但FF错误控制台在Facebook页面上说:
TypeError: $(...).draggable is not a function
Facebook如何关闭可拖动功能?考虑this article here我试过了:
jQuery.noConflict();
jQuery(function() {
jQuery( "#draggable2" ).draggable();
});
FF仍然说(在facebook页面上)jQuery.draggable()不是一个函数。
任何关于Facebook如何“杀死”jQuery可拖动功能的想法?或者我在考虑或测试错误的东西?这是一个更多关于“理解”窗帘背后技术的问题。
答案 0 :(得分:0)
有关故障排除以及如何在此处进行问题排查:
查看facebook的DOM,在我的非黑客攻击环境中已经有一个变量声明为$
,这可能就是$
仍然代表你的内容。监控变量并确定$
是否被覆盖,更改,修改等可能会成为曲折和遗憾的道路。
现在,可能只知道Facebook中已经存在$
,然后在游戏计划中处理你想要用这些知识做的事情。您可以通过点击Ctrl+shift+k
在FireFox中打开浏览器控制台,只需输入$
即可让它在控制台中重新登录$
。
解决问题:
这里的问题很可能与Greasemonkey中的范围有关。你的目标应该是在你的GM脚本范围内引入jQuery而不是在窗口范围内,所以希望这是你添加jquery文件的方式:
// @require https://etc.etc.etc/jquery.min.js
// @require https://etc.etc.etc/jquery-ui.min.js
...
this.$ = this.jQuery = jQuery.noConflict(true);
//remainder of code to insert things
这样的事情将确保在你的Greasemonkey脚本的范围内,$
引用jQuery和jQuery-ui,Facebook可以继续使用它的$
。 :)