我正在开展一个项目(希望)涉及利用已经内置到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中的一些代码?
答案 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"}