在离开页面之前执行onbeforeunload上的JavaScript操作
我写了一些代码,我试图用它来锁定访问者的ip,以及他们在网站上停留的时间。 代码:在离开页面之前执行onbeforeunload上的JavaScript操作,javascript,onbeforeunload,Javascript,Onbeforeunload,我写了一些代码,我试图用它来锁定访问者的ip,以及他们在网站上停留的时间。 代码: var startTime=新日期(); window.onbeforeunload=$(函数(){ /*var ip=(window.location!=window.parent.location)?document.referer:document.location*/ /*var ip=“192.168.1.1”*/ var endTime=new Date();//获取当前时间。 var timesp
var startTime=新日期();
window.onbeforeunload=$(函数(){
/*var ip=(window.location!=window.parent.location)?document.referer:document.location*/
/*var ip=“192.168.1.1”*/
var endTime=new Date();//获取当前时间。
var timespunt=(endTime-startTime);//了解它已经运行了多长时间。
var ip=(window.location!=window.parent.location)?document.referer:document.location;
$(窗口)。加载(函数(事件){
$.post('ajax.php',{ip:ip,timeSpent:timeSpent});
});
});
我不明白的是,为什么不等到用户试图离开站点后再运行这个脚本
有人能帮我让这个等到那时再运行吗?
谢谢大家! 你把这整件事搞得一团糟。您所需要的只是:
var startTime = new Date();
window.onbeforeunload = function() {
var endTime = new Date(); //Get the current time.
var timeSpent = (endTime - startTime); //Find out how long it's been.
var ip = (window.location != window.parent.location) ? document.referrer: document.location;
$.post('ajax.php', {ip: ip, timeSpent: timeSpent});
};
你把整件事搞得一团糟。您所需要的只是:
var startTime = new Date();
window.onbeforeunload = function() {
var endTime = new Date(); //Get the current time.
var timeSpent = (endTime - startTime); //Find out how long it's been.
var ip = (window.location != window.parent.location) ? document.referrer: document.location;
$.post('ajax.php', {ip: ip, timeSpent: timeSpent});
};
我可以看到这段代码有一些问题 首先,
$(function(){})
是$(document.ready(function(){})
的缩写。这意味着它将在DOM就绪时运行函数,然后返回jQuery对象($(document)
)
其次,不需要使用$(window).load(function(){})
。我假设当用户离开页面时,DOM已经被加载
第三,window.onbeforeunload
(和window.onunload
)不会等待AJAX调用完成。您可以尝试使用async:false
使其等待(这可能不适用于所有浏览器)
(注意:window.onbeforeunload
不能在所有浏览器中工作;我知道Opera不会启动它。)
另外,window.onbeforeuload
用于询问用户是否要离开页面。如果您从事件中返回一个字符串,该字符串将显示给用户(Firefox中除外)
如果希望在用户离开页面时发送AJAX调用,我建议改用window.onunload
(function(){ // Anonymous function so startTime isn't global
var startTime = new Date();
window.onunload = function() { // set to a function
var endTime = new Date(); //Get the current time.
var timeSpent = (endTime - startTime); //Find out how long it's been.
var ip = (window.location != window.parent.location) ? document.referrer: document.location;
$.ajax({
url: 'ajax.php',
data: {ip: ip, timeSpent: timeSpent},
async: false
});
};
}());
我可以看到这段代码有一些问题 首先,
$(function(){})
是$(document.ready(function(){})
的缩写。这意味着它将在DOM就绪时运行函数,然后返回jQuery对象($(document)
)
其次,不需要使用$(window).load(function(){})
。我假设当用户离开页面时,DOM已经被加载
第三,window.onbeforeunload
(和window.onunload
)不会等待AJAX调用完成。您可以尝试使用async:false
使其等待(这可能不适用于所有浏览器)
(注意:window.onbeforeunload
不能在所有浏览器中工作;我知道Opera不会启动它。)
另外,window.onbeforeuload
用于询问用户是否要离开页面。如果您从事件中返回一个字符串,该字符串将显示给用户(Firefox中除外)
如果希望在用户离开页面时发送AJAX调用,我建议改用window.onunload
(function(){ // Anonymous function so startTime isn't global
var startTime = new Date();
window.onunload = function() { // set to a function
var endTime = new Date(); //Get the current time.
var timeSpent = (endTime - startTime); //Find out how long it's been.
var ip = (window.location != window.parent.location) ? document.referrer: document.location;
$.ajax({
url: 'ajax.php',
data: {ip: ip, timeSpent: timeSpent},
async: false
});
};
}());
您正在将
window.onbeforeunload
设置为一个jQuery对象,而不是一个函数。这可以修改为工作吗?为什么要使用$(window.load)(
在里面?我假设当用户离开页面时,DOM已经准备好了。这是一个问题,你真的不知道这段代码在做什么,是吗?我试图在站点上获得时间。首先,通过获取开始时间,然后,当用户离开时,获取新时间,父窗口的url(这是在100多个站点上构建的),并使用ajax发布到php页面,在没有用户提示的情况下运行更多php。您正在将window.onbeforeunload
设置为jQuery对象,而不是函数。这可以修改为工作吗?为什么要使用$(window)。加载(
在里面?我假设当用户离开页面时,DOM已经准备好了。这是一个问题,你真的不知道这段代码在做什么,是吗?我试图在站点上获得时间。首先,通过获取开始时间,然后,当用户离开时,获取新时间,父窗口的url(这是在100多个站点上构建的),并使用ajax发布到php页面,在没有用户提示的情况下运行更多的php。浏览器不会等待ajax调用完成,因为这可能不起作用。100%很好。谢谢。@RocketHazmat无需等待它完成,据我所知,触发请求就足够了。@ShadowWizard:但页面不能在ajax调用完成之前卸载吗?我发现,与全国各地的朋友一起测试时,这种方法大约有效8/10次如果失败,它就不能工作。我确实确保我测试过的每个人都有Javscript,并且可以工作。浏览器不会等待AJAX调用完成,因为这可能不起作用。100%很好。谢谢。@RocketHazmat无需等待它完成,据我所知,触发请求就足够了。@ShadowWizard:但是页面不能解锁吗在AJAX调用完成之前,我发现在与全国各地的朋友进行测试时,这种方法大约可以工作8/10次。出于某种原因(在我上面)out fail不起作用。我确实确保与我一起测试的每个人都有Javscript,并且都正常工作。感谢窗口。onunload
建议。感谢窗口。onunload
建议。