什么是Facebook的功能__d

时间:2013-02-14 17:56:34

标签: javascript facebook

我正在开展一个项目(希望)涉及利用已经内置到Facebook中的一些JavaScript。但是我马上遇到了障碍,因为我无法弄明白__d是什么。

如果查看源javascript文件,几乎每个命令都以__d

开头

例如:

__d("legacy:live-timer",["LiveTimer"],function(a,b,c,d){a.LiveTimer=b('LiveTimer');},3);

但我无法在任何javascript文件中找到__d实际执行的任何内容。难道不必在某处为所有这些其他功能定义它以利用它吗?

更新

所以,让我们说有一个像这样的javascript网站...

function alertSomething(var) {
    if (var) alert("Here it is: "+var);
}

if (some condition) alertSomething("something");

现在让我们说我有一个Chrome扩展程序,我可以将自己的Javascript注入页面。无法使用我的Chrome扩展程序Javascript有这样的内容......

if (some other condition) alertSomething("something else");

因此,我会利用页面上已存在的javascript中的一些代码?

3 个答案:

答案 0 :(得分:8)

因为,我已经检查过Facebook JavaScript SDK。我相信它使用依赖注入机制。这是两个网址。

制作:http://connect.facebook.net/en_US/all.js(混淆)

开发:http://connect.facebook.net/en_US/all/debug.js(反混淆)

如果你检查debug.js,你可以看到require, __d, __t等等。 __d更像是来自RequireJS(http://requirejs.org/docs/api.html#define

的定义函数
__d = function(/*string*/ id, /*array<string>*/ deps, factory,
      /*number?*/ _special) {/*TC*/__t([id,'string','id'],[deps,'array<string>','deps'],[_special,'number?','_special']);/*/TC*/

答案 1 :(得分:3)

我在__d的第20行找到了1LWPxIBQ4v0.js的定义。不知道文件是否为每个人命名相同。搜索“a.__d=function(s,t,u,v)”(a是全局对象,即window,有效地使__d成为全局函数。尽管如此,祝你好运......

答案 2 :(得分:0)

函数__d是用于定义模块的RequireJS的API。

示例:

__d('Example', [], function a(b, c, d, e, f, g, h) {
 'use strict';
  if (c.__markCompiled) c.__markCompiled();
  f.exports = {
      a: "Hello World"
      };
 }, null);

呼叫:

require('Example');

输出:

  Object {a: "Hello World"}