MooTools портит Facebook JavaScript SDK - PullRequest
2 голосов
/ 07 марта 2012

У меня есть страница, на которой используются MooTools, и я также добавил Facebook SDK.

<script src="http://code.jquery.com/jquery-1.7.1.min.js" type="text/javascript"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/mootools/1.3.0/mootools-yui-compressed.js"></script>

и в теле это так.

<script src="http://connect.facebook.net/en_US/all.js"></script>
<script>
    FB.init({
        appId      : 'myappid',
        status     : true, // check login status
        cookie     : true, // enable cookies to allow the server to access the session
        xfbml      : true, // parse XFBML
        oauth      : true
    });
</script>

Для отправки запроса приглашения FB я использую.

FB.ui({
            method: 'apprequests',
            message: 'tests messages',
            //title: 'Invite you friend to MyApp',
            to: fbid
        },function(r){ console.log(r);  });

Но это дает мне "ноль" в файле all.js. Если я удаляю файл MooTools, все работает нормально. Но мне нужны MooTools. Как я могу решить эту проблему? Любая помощь, пожалуйста?

1 Ответ

0 голосов
/ 08 марта 2012

вы загружаете mootools ПОСЛЕ jquery.это означает, что он не займет $ и вернется в свой собственный режим noConflict, а селектор останется с псевдонимом только document.id.

либо весь ваш код mootools должен использовать это, либо использовать простой шаблон замыкания, который позволяет использовать от $ до document.id в mootools.

$; // jQuery
(function($) {
    $; // mootools
})(document.id);

другие вещи, которые следует учитывать приИспользование MooTools: это прототип.убедитесь, что вы не делаете глупых вещей вроде циклов for ... in в массивах без проверок hasOwnProperty (с самого начала это плохая идея, но она более распространена, чем можно подумать ...)

помимовыше, вам нужно отследить его до определенного кода, который не работает.скорее всего, вы передадите функцию jQuery тому, что mootools считает элементом, например, $('foo'), когда это jQuery не вернет объект элемента.Даже $('#foo') не сработает, но $('#foo')[0] сработает.

...