我加上:
<script src="/bower_components/ember/ember.min.js"></script>
在我们的snagengage聊天代码的同一页面上:
<!-- 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库之间的冲突。
谢谢!
答案 0 :(得分:1)
我用SnapEngage开了一张票,他们最近推出了修复程序。如果您在2014年3月6日之前拥有SnapEngage帐户,则需要在帐户的“样式”部分中单击“保存”,以便将JS更新到最新版本。在此之后,错误应该消失 - 为我工作!
注意:我使用的是Ember 1.4.0
答案 1 :(得分: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。