![](/img/trans.png)
[英]How to call a javascript function from .js file in a Drupal module file
[英]Call global JS function from module .js file in Drupal 7
在Sk8erPeter的大力帮助下,我设法在Drupal 7中针对某些内容类型的节点创建和节点更新执行Javascript代码。
我现在的问题是,无法通过此模块js文件调用函数FB.api。 它与Javascript名称空间有关吗? 从控制台运行FB.api()函数可以正常工作...
在此先感谢您的帮助。
尼尔斯
根据您的评论,我只是在看您的testModule.behaviors.js
,它看起来与我在另一个主题中写给您的函数看起来并不相似。
您当前的代码仅是这样的:
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
功能在哪里? 所有其他东西在哪里? :)
当前代码输出错误甚至不足为奇,因为我认为甚至在定义FB
对象之前就包含此JavaScript文件,这样您就可以直接在header中调用此代码。
我认为您的testModule.behaviors.js
文件应如下所示(基于我们之前讨论的代码):
(function ($) {
Drupal.behaviors.testModule = {
doitnow: function () {
alert("A new \"tear\" content has just been added!");
// change this code to the appropriate one
FB.api('/me/shareatear:share', 'post', {
tear: document.URL
}, function (response) {
if (!response || response.error) {
alert('Error occured');
} else {
alert('done. ' + response.id);
}
});
},
attach: function (context, settings) {
try {
if (settings.testModule.tear_just_added) {
this.doitnow();
}
} catch (ex) {}
}
};
})(jQuery);
因此,替换您的当前内容(在这里您仅调用FB.api
而没有任何Drupal特定的行为 “包装器”),然后将其内容更改为此内容。
编辑:
好的,尝试使用以下db_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'");
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.