2013-10-31 2 views
1

의 원인이는 최대한 빨리 추가로 JS 오류

:

<!-- 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 

enter image description here

누구나이 경험이 있습니까? 이 문제를 해결하는 방법에 대한 제안이 있으십니까?

추신 : 나는 그 JS 줄을 지우려고했는데, 그것은 분명히 Ember와 YAHOO 라이브러리 사이의 갈등입니다.

감사합니다.

답변

0

나는이 동일한 문제가 있었는데 나는 YAHOO.register 함수에서 _super()가 233 행을 두 번 순환하여 발생했다고 생각한다. 처음에는 변수가 k.versions와 k.builds가 정의되었지만 두 번째는 그렇지 않습니다 (아마도 슈퍼가 인수를 전달하지 않고 YAHOO.register 함수를 재실행하기 때문일 수 있습니다.) 원인을 정확히 파악했는지 여부에 관계없이

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

에 :

k.versions ? k.versions.push(p):false;k.builds ? k.builds.push(q):false; 
라인 (233)의 변화에 ​​

1) 다음 snapengage.js 소스에 다음과 같은 편집하여 (아주 해키 방법이기는하지만) 문제를 해결 할 수 있었다

변수가 정의되어 있는지 확인하십시오. 그들이 있다면, 그들을 밀어. 그렇지 않다면 아무 것도하지 마십시오.

//= stub ./vendor/snapengage.js 

이로드에서 타다 남은 응용 프로그램을 중지합니다

나는 응용 프로그램/자산/자바 스크립트/공급 업체에 snapengage.js 편집 된 소스 파일을 배치/다음 내 application.js 파일에 다음 줄을 추가 앱로드시 SnapEngage 소스.

마지막으로, 나는 채팅 믹스 인을 쓴 다음과 같이 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 스크립트를 두 번 자체를로드하지 않습니다하지만 당신은 여러 페이지에 믹스 인을 사용하는 경우 웹 페이지에서 렌더링 된 '도움말'버튼을 클릭 할 때마다 플러그인이 snapengage.com을 호출하는 것처럼 보이기 때문에 채팅 애셋 (이미지, 로딩 회 전자 등)을 두 번로드하지 않도록 할 수 있습니다.

앞서 언급했듯이 매우 위험한 솔루션이며 플러그인 용 소스 코드 편집을 권장하지 않지만 Ember.js 앱에서 Snapengage를 쉽게 사용할 수있는 수정 방법을 제공합니다.

1

SnapEngage를 사용하여 티켓을 개설했으며 최근 수정본을 보냈습니다. 2014 년 3 월 6 일 이전에 SnapEngage 계정이있는 경우 JS의 최신 버전으로 업데이트하려면 계정의 '스타일'섹션에서 '저장'을 클릭해야합니다. 이 후에 오류가 사라져야합니다 - 나를 위해 일했습니다!

참고 : Ember 1.4를 사용하고 있습니다.0

관련 문제