2013-02-14 22 views
2

我正在研究一個項目,(希望)涉及利用已經內置到Facebook的一些JavaScript。但是馬上我有一個障礙,我無法弄清楚__d是什麼。什麼是Facebook的功能__d

如果你看一下JavaScript文件,幾乎每一個命令__d

例如開頭的源:

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

但我不能在任何地方任何JavaScript文件中查找__d實際確實。不應該爲所有這些其他功能定義它來利用它嗎?

UPDATE:

所以我們可以說有像這樣一些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

這是一個JavaScript minifier的結果。爲什麼對你很重要__d'呢?這似乎是你不應該使用的內部函數。 – 2013-02-14 17:59:19

+0

因爲如果我想利用某一行代碼,我需要知道它的功能。我意識到這是被縮小的東西,但它仍然需要在某個地方定義。當我想到javascript時,我認爲沒有「內部」。我應該期望在某處仍然可以看到說'function __d'的東西。 – rgbflawed 2013-02-14 18:01:53

+0

「利用」是什麼意思?此功能不適合您使用。而且,JavaScript *確實擁有私有的(我的意思是「內部」)功能。 – 2013-02-14 18:08:09

回答

3

我在1LWPxIBQ4v0.js的第20行找到了__d的定義。不知道該文件是否對每個人命名相同。搜索「a.__d=function(s,t,u,v)」(a是全局對象,即window,實際上使__d成爲全局函數)。祝你好運,儘管如此... ...

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*/ 
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"}