【问题标题】:Drupal does not support dollar sign for jQuery and its breaking my facebook?Drupal 不支持 jQuery 的美元符号及其破坏我的 Facebook?
【发布时间】:2015-02-18 11:56:29
【问题描述】:

在我包含 Facebook API 的那一刻,我得到了错误:

Uncaught ReferenceError: $ is not defined

原因是 Drupal 7 允许:

jQuery(....

但不是

$(....

但实际上 Facebook JS API 确实使用了

$(....

如何让 Drupal 支持 $( 注释或解决此问题的正确方法是什么?

更新

我假设这里必须改变一些东西:

(function(d){
   var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
   js = d.createElement('script'); js.id = id; js.async = true;
   js.src = '//connect.facebook.net/en_US/all.js';
   d.getElementsByTagName('head')[0].appendChild(js);
}(document));

?

【问题讨论】:

  • 为什么这对 facebook 很重要? javascript sdk 的初始化代码不使用 jquery(幸运的是)。
  • 在上面的javascript部分,我添加了all.js。我会假设这是在某处调用 $(...,导致我收到错误消息?
  • Facebook 不使用 jQuery,所以这不是原因。这与 Facebook 完全没有关系。
  • 看来我下面的回答不会有任何帮助。我对 FB 不是很熟悉,但我想@luschn 是对的,这不是 jQuery 问题。运行代码,能看到文档的head添加了对应的script标签(与id="facebook-jssdk"为一)吗?
  • PS 我已将您的代码从 UPDATE 添加到我的 Drupal 7 测试站点(作为带有 PHP 过滤器的块) - 没有错误,一切正常。

标签: jquery drupal-7 facebook-javascript-sdk


【解决方案1】:

如何让 Drupal 支持 $

要让它工作,只需将你的代码包装在这个函数中:

(function ($) {
  //your code, now you can use "$" with no problems
})(jQuery);

这是一个official suggestion

不过,您也可以通过其他方式做到这一点。例如,添加

var $ = jQuery;

在JS代码的开头应该也可以。

您也可以使用jQuery Dollar 模块。

【讨论】:

  • 这确实解决了我的问题,但我仍然不明白的是错误发生在以 VM 开头然后是数字的文件中。每次我刷新时,这个数字都会改变。所以首先是VM1838,然后是VM3998,然后是VM3893等。在那个文件中,它调用“$(”,但它似乎是由浏览器或其他东西运行的。我不知道,但它没有被专门包含在Facebook Connect中.
  • @coderama 我之前没有遇到过这个特殊问题,所以无法提供任何建议:(
猜你喜欢
  • 1970-01-01
  • 2010-12-14
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
  • 2011-09-07
  • 2019-10-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多