0

いいねボタンのプラグインコードのためにFacebookによって自動的に生成された関数を取得しました。ただし、関数内の変数についてはよくわかりません。それぞれの意味を理解するのを手伝ってくれる人がいれば、本当にありがたいです。

このhtml関数は、以下からデータを収集します。

    <div class="fb-like" data-href="https://www.facebook.com/yanntiersen.official"   
data-send="true" data-width="450" data-show-faces="true" data-font="arial"></div>

実際のjavascript関数:

<script>(function(d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) return;
  js = d.createElement(s); js.id = id;
  js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1&appId=123456789";
  fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>

関数が呼び出されているのは(document, 'script', 'facebook-jssdk')わかりますが、どのように機能するのかよくわかりません。誰かが私にこれを説明できますか?

4

4 に答える 4

3
(function ( d , s , id) {

}(document, 'script', 'facebook-jssdk));

以下が真であることを意味します

d = document;
s = 'script';
id = 'facebook-jssdk';

この知識で

// Get the first <script> tag in the document
var fjs = document.getElementsByTagName(s)[0]

// Return void from this function if '#facebook-jssdk' exists
if ( document.getElementById('facebook-jssdk') ) return ;

// Create a new script tag
var js = d.createElement(s)

// Assign the id to the script tag
js.id = id;

// Assign a source to load asyncrounously into this tag
js.src = '//connect...';

// Insert the script element into the DOM BEFORE the first script tag
fjs.parentNode.insertBefore( js , fjs )

それが役立つことを願っています

于 2013-03-16T17:00:56.183 に答える
2
//Create a function taking arguments `d`, `s` and `id`
(function(d, s, id) {

    //Initialise variable js, initialise variable fjs to the first element with the tag 
    //name s
    var js, fjs = d.getElementsByTagName(s)[0];

    //If the element with id = id exists already, escape from the function.
    if (d.getElementById(id)) return;

    //Create a new element of type s ('script') and set it's id to id ('facebookjssdk')
    js = d.createElement(s); js.id = id;

    //Set the script's src attribute to the path specified.
    js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1&appId=123456789";

    //Insert the new element immediately before the first <script> on the page.
    fjs.parentNode.insertBefore(js, fjs);

//Call the function immediately with document for d, 'script' for s and 'facebook-jssdk' 
//for id.
}(document, 'script', 'facebook-jssdk'));

pattern に慣れていない場合は、(function () {})();コードをカプセル化し、定義どおりに自分自身を呼び出す単なる関数です。

于 2013-03-16T17:00:28.613 に答える
2

基本的にはこれを行います:

Gets the first "<script>" element in the document
If an object exists with the id of "facebook-jssdk" than
    return (dont process the rest of the code)
EndIf
Create a "<script>" element
Set the new "<script>" element's id to 'facebook-jssdk'
Set the new "<script>" element's src location to "//connect.facebook.net/en_GB/all.js#xfbml=1&appId=123456789"
(this loads a javascript file from facebook's server onto the client)
Insert the new "<script>" tag before the first "<script>" tag in the page

それが役立つことを願っています:)

于 2013-03-16T17:03:46.003 に答える
1

スクリプトは、「script」というタグ名を持つ要素を探し、最初のスクリプト オブジェクトへの参照を取得します。

次に、「facebook-jssdk」の ID を持つ要素を探します。この ID が見つかった場合、処理を停止します。

次に、新しいスクリプト タグを作成し、id を「facebook-jssdk」に、ソースを「//connect.facebook.net/en_GB/all.js#xfbml=1&appId=123456789」に設定し、最初のスクリプトの前にスクリプトを挿入します。ページ上のスクリプト。

于 2013-03-16T16:58:01.487 に答える