2016-11-02 2 views
0

Ember CLIENT 0.2.1에서 Ember 1.10.1을 사용하고 있습니다. 현재 Natero을 우리의 응용 프로그램에 통합하려고하고 있는데, 초기화 도구를 사용하여 생각한 quickstart guide을 살펴 보았습니다. Chrome에서 작동하지만 다른 브라우저에서는 오류가 표시되는 것 같습니다 : _na is undefined. 일반적인 생각은 스크립트를 동적으로 삽입하고 윈도우에서 _na 개체를 설정하기 위해 해결 될 때까지 기다리는 것입니다.Natero를 ember-cli와 통합합니다.

이 문제를 해결하기위한 더 나은 방법은 무엇입니까?

import Ember from 'ember'; 
/* jshint ignore:start */ 
import ENV from 'webapp/config/environment'; 
/* jshint ignore:end */ 

export function initialize(/* container, application */) { 
    /* jshint ignore:start */ 
    let src = 'https://events.natero.com/scripts/natero_analytics.min.js'; 

    let injectScript = function (src) { 
     return new Ember.RSVP.Promise(function (resolve) { 
     var script = document.createElement('script'); 
     script.type = 'text/javascript'; 
     script.async = true; 
     script.src = src; 
     script.onload = function() { 
      resolve(); 
     }; 
     document.getElementsByTagName('head')[0].appendChild(script); 
     }); 
    }; 

    injectScript(src).then(function() { 
     /* 
     * On each page that loads, initialize the natero analytics js library. 
     * The userId and accountId can be set here if known at initialization time. 
     * Once the userId/accountId are set they are stored in a cookie for later use, 
     * so that they only need to be set once per session. 
     */ 
     // http://apidocs.natero.com/quickstarte.html 
     // https://login.natero.com/itcenter.html 
     let authKey = ENV.natero.authKey, 
      apiKey = ENV.natero.apiKey, 
      settings = { 
      trackUnload:  true, 
      debugUrl:   "https://test.natero.com/v1/" + authKey + "/" + apiKey, 
      disableEventSend: false, // disable the sending of events 
      debug:   false // console debug prints 
      }; 

     if (['production', 'prd'].indexOf(ENV.environment) > -1) { 
     delete settings['debugUrl']; 
     } 

     window._na = new na(
     apiKey, 
     authKey, 
     settings 
    ); 
    }); 
    /* jshint ignore:end */ 

    Ember.Router.reopen({ 
    notifyNatero: function() { 
     // https://github.com/emberjs/ember.js/issues/10180 
     let currentRoute = Webapp.__container__.lookup('controller:application').get('currentRouteName'); 
     _na.setModuleId(currentRoute); 
    }.on('didTransition') 
    }); 
} 

export default { 
    name:  'natero', 
    initialize: initialize 
}; 
+0

왜 그렇게하지 beforeModel 후크에게 응용 프로그램에서 수행 할 수 있습니다 당신이 https://test.natero.com/v1/ 스크립트를로드에 index.html을하고 현재의 성공 콜백 함수의 예를 실행.을 포함 할 수있다 index.html에 스크립트를 포함 시키시겠습니까? –

답변

0

방금 ​​주문을 변경했습니다. 이

let injectScript = function (src) { 
     return new Ember.RSVP.Promise(function (resolve) { 
     var script = document.createElement('script'); 
     script.type = 'text/javascript'; 
     script.async = true; 
     document.getElementsByTagName('head')[0].appendChild(script); 
     script.onload = function() { 
      resolve(); 
     }; 
     script.src = src; 

     }); 
    }; 

하나 더 많은 옵션을 시도해 것은