javascript - 正确使用 Web Font Loader 事件/非事件回调

标签 javascript callback webfont-loader

我在回答这个应该是相当明显的问题时遇到了麻烦。

Webfont Loader 文档指出将其放置为“HTML 文档 <head> 中的第一个元素”。它还包括事件/非事件回调选项,这些选项在加载字体或加载失败/超时时调用。

问题是,如果我将回调函数放在紧随 后的脚本 block 中,则回调函数当时是未定义的。

我的代码如下:

<head>
  <script type="text/javascript">
    WebFontConfig = {
      google: { families: [ 'Playball::latin' ] },
      active: doActive(),
      inactive: doInactive()
    };
    (function() {
      var wf = document.createElement('script');
      wf.src = ('https:' == document.location.protocol ? 'https' : 'http') +
        '://ajax.googleapis.com/ajax/libs/webfont/1/webfont.js';
      wf.type = 'text/javascript';
      wf.async = 'true';
      var s = document.getElementsByTagName('script')[0];
      s.parentNode.insertBefore(wf, s);
    })(); </script>

  // ... other code ...

  <script>
    function doActive() {
        // ...
    }
    function doInactive() {
        // ...
    }
  </script>
</head>

这只是默认的 Google 代码,加上两个回调。

我看到的唯一明显的选择是在定义其他函数后包含 webfont 加载器,但这并不优雅。我知道有更好的解决方案,但我的 Google-fu 没有找到它。

最佳答案

你的错误是直接执行回调。

 WebFontConfig = {
  google: { families: [ 'Playball::latin' ] },
  active: doActive(), // () executes directly
  inactive: doInactive()
};

您应该尝试这样做:

 WebFontConfig = {
  google: { families: [ 'Playball::latin' ] },
  active: doActive, // Only the function. The library will execute the function 
  inactive: doInactive
};

如果库执行您的回调,该函数应该可用

关于javascript - 正确使用 Web Font Loader 事件/非事件回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20249770/

相关文章:

javascript - WebFont Loader 似乎不遵守超时属性?

javascript - 谷歌地理图表使区域可点击

javascript - 关闭javascript确认框后如何从按钮上移除焦点

javascript - 设计不当的应用程序 : should we rewrite?

javascript - 将函数作为事件处理程序的回调传递时,在我的 javascript 项目中获取不正确的值

javascript - 我无法在 Node.js 中的 readFile() 回调中更新对象属性

javascript - 如何在触发 'end' 事件之前使用 fast-csv 处理 Node js 中 csv 文件的最后一行?

javascript - 谷歌网络字体 : how to unload fonts after loading them?

angular - 在 Angular 中使用字体加载器

javascript - 逻辑 'and' 与 javascript 中的对象和值