jQuerys draggable在facebook页面上不起作用(基本理解)

时间:2016-01-04 15:50:00

标签: javascript jquery facebook jquery-ui

当试图分析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可拖动功能的想法?或者我在考虑或测试错误的东西?这是一个更多关于“理解”窗帘背后技术的问题。

1 个答案:

答案 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可以继续使用它的$。 :)