Javascript 从Drupal7中的module.JS文件调用全局JS函数
在Drupal7中,我成功地在节点创建和特定内容类型的节点更新上执行Javascript代码 我现在的问题是,我无法使用此模块js文件调用函数FB.api。它是否与Javascript名称空间有关?从控制台运行FB.api()函数可以正常工作 提前感谢您的帮助Javascript 从Drupal7中的module.JS文件调用全局JS函数,javascript,drupal,drupal-7,Javascript,Drupal,Drupal 7,在Drupal7中,我成功地在节点创建和特定内容类型的节点更新上执行Javascript代码 我现在的问题是,我无法使用此模块js文件调用函数FB.api。它是否与Javascript名称空间有关?从控制台运行FB.api()函数可以正常工作 提前感谢您的帮助 零根据您的评论。。。我只是在看你的,它看起来和我写给你的函数都不一样 您当前的代码仅如下所示: FB.api( '/me/shareatear:share', 'post', { tear: document.UR
零根据您的评论。。。我只是在看你的,它看起来和我写给你的函数都不一样 您当前的代码仅如下所示:
FB.api(
'/me/shareatear:share',
'post',
{ tear: document.URL },
function(response) {
if (!response || response.error) {
alert('Error occured');
} else {
alert('done. ' + response.id);
}
});
Drupal.behaviors的attach
函数在哪里?我之前向您展示了它的attach
函数?其他东西都在哪里?:)当前代码输出错误也就不足为奇了,因为我认为在定义
FB
对象之前就包含了这个JavaScript文件,这样您就可以在头中直接调用这个代码了
我认为您的testModule.behaviors.js
文件应该是这样的(基于我们之前讨论的代码):
因此,请替换您当前的内容(您只调用FB.api
,不使用任何“包装器”),并将其内容更改为此内容
编辑: 好的,尝试使用下面的
db\u query()
将这个模块的权重设置得更高一次,这样它的钩子调用得比其他模块的钩子晚。将这些行放入代码后,保存文件,删除Drupal缓存,然后注释掉相应的行!它不需要一直运行,在每个页面加载
/**
* Implements hook_init()
* @see http://api.drupal.org/api/drupal/modules!system!system.api.php/function/hook_init/7
*/
function testModule_init() {
// after putting this in your file, save it, delete cache, then COMMENT OUT THE FOLLOWING LINE!!! It should only RUN ONCE (it's enough).
db_query("UPDATE {system} SET weight = 111 WHERE type = 'module' AND name = 'testModule'");
}
嗨,尼尔斯!我在另一个主题中也问了这个问题,但是当从开发者工具的
控制台选项卡中的代码调用这个函数时(比如Chrome的内置工具或Firebug),是否有任何错误消息或者“错误”的症状是什么?你能告诉我们你在哪里调用这个函数的全部代码吗?@Sk8erPeter,用你的示例警报调用doitnow()就可以完美地工作,没有任何错误。不起作用的是从另一个名为FB.api()的模块调用另一个函数。我可以从控制台运行这个Fb.api函数,没有任何错误。但是在doitnow()函数中,它似乎是未知的。控制台中相应的错误是“FB未定义@”。这是我实际上想要在doitnow()中调用的函数:FB.api('/me/shareatear:share','post',{tear:document.URL},函数(response){if(!response | | response.error){alert('error occurrent');}else{alert('worked'.+response.id);}}});您好@Sk8erPeter,我先尝试了您的初始代码函数仍然没有加载。警报出现,但加载FB.api失败。当我从这段代码复制FB.api函数到控制台时,它工作正常…所以我们启动代码太早了?以后如何启动?@Nils:我编辑了我的答案,请参阅文章末尾的模块权重更改方法。
/**
* Implements hook_init()
* @see http://api.drupal.org/api/drupal/modules!system!system.api.php/function/hook_init/7
*/
function testModule_init() {
// after putting this in your file, save it, delete cache, then COMMENT OUT THE FOLLOWING LINE!!! It should only RUN ONCE (it's enough).
db_query("UPDATE {system} SET weight = 111 WHERE type = 'module' AND name = 'testModule'");
}