【问题标题】:How do I use Firebase in an external Javascript file如何在外部 Javascript 文件中使用 Firebase
【发布时间】:2013-03-03 03:01:29
【问题描述】:

这可能是一个非常简单的问题,但我一直在尝试在与 HTML 文件一起使用的外部 javascript 文件中使用 Firebase,但无法使其正常工作。我计划将此文件用于许多其他类似的页面,因此我宁愿将其保存在外部文档中。具体来说,我的代码是:

$(function() {

var head= document.getElementsByTagName('head')[0];
var script= document.createElement('script');
script.src= 'https://cdn.firebase.com/v0/firebase.js';
head.appendChild(script);

var Database = new Firebase('https://myfirebase.firebaseIO.com/');
...

但是当我尝试运行它时,它说 Firebase 对象/关键字未定义。我知道脚本已正确附加到 HTML 页面,因为我在运行代码后检查了页面上的 HTML。

我还在某处读到过,您可能需要一台个人服务器来运行 Firebase,但坦率地说,我真的不知道这意味着什么 - 无论如何,我使用 Mac OSX 并运行我所有的 HTML 和 Javascript铬。

非常感谢!

【问题讨论】:

  • 在回调中使用 jQuery getScript。

标签: javascript firebase


【解决方案1】:

问题在于,使用 document.createElement 不会强制在调用包含脚本之前加载和呈现脚本(现在正在调用它)。此方法无法保证您包含的脚本何时会被调用。

此外,您通过将脚本放在$(function() {...}) 中来加载 onDomReady 脚本;你会想立即将它插入到标题中,而不是等待整个文档加载。

最简单的答案就是把 Firebase 放到 html 页面的头部;您还没有在这里真正解释您的限制,但我认为这不是您的选择。如果是,KISS。

另一个简单的答案是使用 jQuery,因为您显然可以使用它。

$.getScript('https://cdn.firebase.com/v0/firebase.js', function() {

    // now I can use Firebase

});

您也可以使用其他方法来完成此操作(等到使用 setInterval 定义 Firebase;使用除 document.createElement 之外的其他脚本检索方法——尝试谷歌搜索“通过 javascript 加载顺序动态加载脚本”),但我认为这涵盖充分满足您的需求。

【讨论】:

  • 非常感谢,JQuery 函数让它工作了!我很好奇,getScript命令会在onDomReady之前自动运行吗?
  • 不错的答案加藤!请注意,getScript 会自动破坏缓存,因此为了获得最佳性能,您可能只想将 jQuery.ajax 与 dataType:"script" 和 cache:true 一起使用
  • @user2170663 getScript 命令在浏览器到达编写它的 javascript 行时运行。此时可能会或可能不会加载 DOM,但至少在获取脚本之前您没有明确地等待 DOM 加载。这有意义吗?
  • @bennlich 好点;但是对于上述任何一个都不需要加载 DOM,只需要 jQuery,只要它不被动态包含,你就可以开始了。
  • @user2170663 getScript 在您执行时运行;它是否在 onDomReady 或之前运行仅取决于您将其放在调用脚本中的位置
猜你喜欢
  • 2023-03-25
  • 2011-02-04
  • 1970-01-01
  • 2013-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-20
  • 1970-01-01
相关资源
最近更新 更多