2017-05-03 4 views
0

Google에 하나의 추적 이벤트를 보내는 클릭시 트리거하는 기능과 데이터베이스에 레코드를 작성하기 위해 내 서버에 요청하는 기능이 있습니다.새 창을 열기 전에 클릭시 함수의 모든 코드가 실행되도록하려면 어떻게해야합니까?

데스크톱 사용자에게는 모든 것이 잘 작동하지만 일부 모바일 사용자에게는 내 데이터베이스에없는 클릭 이벤트가 기록됩니다. 몇 가지 조사를 한 후에는 웹보기를 통해 새 창을 열면 이전 창에서 JavaScript 실행이 중지되므로 내 서버에 대한 요청이 전송되지 않는다는 사실을 좁혀 냈습니다. 일시적으로 창 열기에 약간의 지연을 추가하여 문제를 일시적으로 완화했지만 최근에는 웹 브라우저의 내장 팝업 차단기가 창을 차단하여 지연을 제거해야한다는 것을 알았습니다.

HTML :

<a ng-click="captureClick(pageUrl)" target="_blank"> 

JS :

$scope.captureClick = function(link){ 
    //Send Google Analytics click event 
    ga('send', 'event', 'click'); 

    var linkObj = { 
    //Create object with click details 
    }; 
    Links.save(linkObj); 

    $window.open(link); 
}; 
+0

당신이 당신의 코드를하시기 바랍니다 게시 할 수 있습니까? –

+0

모바일 화면에서 무언가를 탭하는 것은 PC에서 무언가를 클릭하는 것과 정확히 동일하지 않습니다. 코딩 방법에 따라 클릭 논리를 올바르게 실행하기 위해 터치 이벤트를 처리하지 못할 수 있습니다. – Ken

+0

내 코드의 단순화 된 버전을 추가했습니다 – CptnKrunch

답변

0

사용 약속 :

new Promise(function(resolve, reject) { 
    // your code to your server 
    // after your server replied to the call 
    resolve(); 
}).then(function(data) { 
    // google track code 
}); 
+0

콜백을 사용하는 것과 다르게 동작합니까? 나는 $ window.open 콜백을 콜백에 넣었고 팝업 블로커는 그것을 멈췄다. – CptnKrunch

+0

Links.save (linkObj); 여기에 Google 추적 및 호출 호출을 연결하기 위해 약속이 반환되어야합니다. 나에게 가져 왔습니까? – quirimmo

+0

약속을 사용하려고합니다. 감사합니다. – CptnKrunch