1

一旦我添加:

<script src="/bower_components/ember/ember.min.js"></script>

在我们的snaengage聊天代码所在的同一页面上:

<!-- begin SnapEngage code -->
<script type="text/javascript">
    (function() {
        var se = document.createElement('script'); se.type = 'text/javascript'; se.async = true;
        se.src = '//commondatastorage.googleapis.com/code.snapengage.com/js/4f645e9b-afb9-4226-9ebc-f8fc52d28cef.js';
        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(se, s);
    })();
</script>
<!-- end SnapEngage code -->

它会引发错误:

Uncaught TypeError: Cannot call method 'push' of undefined 4f645e9b-afb9-4226-9ebc-f8fc52d28cef.js:223
YAHOO.register 4f645e9b-afb9-4226-9ebc-f8fc52d28cef.js:223
(anonymous function) 4f645e9b-afb9-4226-9ebc-f8fc52d28cef.js:242

在此处输入图像描述

有人经历过吗?关于如何解决这个问题的任何建议?

PS:我尝试删除该 JS 行并且它有效,我猜这肯定是 Ember 和一些 YAHOO 库之间的冲突。

谢谢!

4

2 回答 2

1

我用 SnapEngage 开了一张票,他们最近推出了一个修复程序。如果您在 2014 年 3 月 6 日之前拥有 SnapEngage 帐户,那么您需要在帐户的“样式”部分中单击“保存”,以便将 JS 更新到最新版本。在此之后,错误应该消失 - 为我工作!

注意:我使用的是 Ember 1.4.0

于 2014-03-25T16:08:53.897 回答
0

我遇到了同样的问题,我认为这是由 YAHOO.register 函数上的 _super() 循环通过第 233 行两次引起的。第一次它定义了变量 k.versions 和 k.builds ,但第二次没有定义(可能是因为超级重新运行了 YAHOO.register 函数而没有传递任何参数。不管究竟是什么原因造成的,我能够通过对 snapengage.js 源进行以下编辑来解决这个问题(尽管是以一种非常老套的方式):

1)在第233行更改:

k.versions.push(p);k.builds.push(q);

至:

k.versions ? k.versions.push(p):false;k.builds ? k.builds.push(q):false;

所有这一切都是检查变量是否已定义,如果已定义,则推送给它们。如果没有,什么也不做。

我将编辑后的 ​​snapengage.js 源文件放在 app/assets/javascripts/vendor/ 中,然后将以下行添加到我的 application.js 文件中:

//= stub ./vendor/snapengage.js

这将阻止您的 ember 应用程序在应用程序加载时加载 SnapEngage 源。

最后,我编写了一个聊天 mixin 并加载了 snapengage.js 脚本,如下所示:

App.Chat = Em.Mixin.create({
  agentOnline: false,

  didInsertElement: function() {
    this._getChatApi();
  },

  _getChatApi: function() {
    var url = 'assets/home/vendor/snapengage.js',
        _this = this;

    $.getScript(url).done(function() {

        // Your custom SnapEngage Javascript API code here. For example...
        SnapEngage.getAgentStatusAsync(function(online) {
            _this.set('agentOnline', online);
        });

    });
  },

});

App.IndexView = Em.View.extend(Home.Chat, {
    // The rest of your view code here
});

snapengage.js 脚本不会自动加载两次,但如果您在多个页面上使用 mixin,您可能需要确保没有两次加载聊天资源(图像、加载微调器等),因为插件似乎每次单击网页上呈现的“帮助”按钮时,请致电 snapengage.com。

正如我所提到的,这是一个非常 hacky 的解决方案,我不建议编辑插件的源代码,但这将为您提供一个修复,以便在 Ember.js 应用程序中轻松使用 Snapengage。

于 2014-02-04T16:59:55.490 回答