Javascript 在打开新窗口之前,如何确保单击函数中的所有代码都已执行?
我有一个功能,点击时触发,向谷歌发送一个跟踪事件,向我的服务器发送一个请求,在数据库中创建一个记录 对于桌面用户来说一切都很好,但对于一些移动用户来说,谷歌会记录我的数据库没有记录的点击事件。经过一些研究,我认为我已经缩小了问题的范围,通过web视图打开一个新窗口会导致前一个窗口停止执行JavaScript,因此对我的服务器的请求永远不会被发送。我暂时缓解了这个问题,在打开窗口时增加了一点延迟,但最近我注意到web浏览器中内置的弹出窗口拦截器正在阻止窗口,所以我不得不消除延迟 Html: 使用承诺:Javascript 在打开新窗口之前,如何确保单击函数中的所有代码都已执行?,javascript,angularjs,tracking,Javascript,Angularjs,Tracking,我有一个功能,点击时触发,向谷歌发送一个跟踪事件,向我的服务器发送一个请求,在数据库中创建一个记录 对于桌面用户来说一切都很好,但对于一些移动用户来说,谷歌会记录我的数据库没有记录的点击事件。经过一些研究,我认为我已经缩小了问题的范围,通过web视图打开一个新窗口会导致前一个窗口停止执行JavaScript,因此对我的服务器的请求永远不会被发送。我暂时缓解了这个问题,在打开窗口时增加了一点延迟,但最近我注意到web浏览器中内置的弹出窗口拦截器正在阻止窗口,所以我不得不消除延迟 Html: 使用承
new Promise(function(resolve, reject) {
// your code to your server
// after your server replied to the call
resolve();
}).then(function(data) {
// google track code
});
你能发布你的代码吗?在手机屏幕上点击某个东西与在电脑上点击某个东西并不完全相同。根据你的编码方式,你可能无法正确处理触摸事件以执行点击逻辑。我添加了一个简化版本的代码。这与使用回调有什么不同吗?我将$window.open调用放入回调中,弹出窗口阻止程序停止了它。Links.save(linkObj);它应该返回一个承诺,以便在这里连接对google tracking和window.open的调用。你收到我的消息了吗?使用承诺不起作用。在手机上,从任何类型的回调启动窗口打开都会被阻止。
$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);
};
new Promise(function(resolve, reject) {
// your code to your server
// after your server replied to the call
resolve();
}).then(function(data) {
// google track code
});