【问题标题】:window.onbeforeunload and redirect to root pathwindow.onbeforeunload 并重定向到根路径
【发布时间】:2011-07-13 07:56:23
【问题描述】:

我确实在一个项目中找到了一些 javascript/activex 代码,在离开页面时调用 (window.onbeforeunload):

我的项目可以通过该地址访问

www.someaddress.itdoesntexists/MyProjectName/page.jsp

当调用注销函数时,页面logout.jsp中的动作被正确执行,但在进程结束时用户被重定向到

www.someaddress.itdoesntexists

而不是

ww.someaddress.itdoesntexists/MyProjectName/

代码:

<script type="text/javascript">
var loggedout = false;

bVer = parseInt(navigator.appVersion);
bName = navigator.appName;
browserIE = bName == "Microsoft Internet Explorer";
browserNS = bName == "Netscape";

function sendHttpRequestSubmit (http_request, parameters) {
    http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    http_request.setRequestHeader("Content-length", parameters.length);
    http_request.setRequestHeader("Connection", "close");
    http_request.send(parameters);
}

function httpRequest(url, mime, callback, async, parameters) {
    var http_request = false;
    if (window.XMLHttpRequest) { // Mozilla, Safari,...
        http_request = new XMLHttpRequest();
        if (http_request.overrideMimeType) http_request.overrideMimeType(mime);
    } else if (window.ActiveXObject) { // IE
        try {
            http_request = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
                http_request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {}
        }
    }
    if (!http_request) {
        alert('Unable to create a XMLHTTP instance');
        return false;
    }
    http_request.onreadystatechange = function () {
        if (http_request.readyState == 4) {
            if (http_request.status == 200) {
                if (callback != null) callback(http_request);
            } else alert('There is a problem with the request "' + url + '"');
        }
    }
    async = async == null ? true : async;
    http_request.open('POST', url, async);
    if (parameters != null) sendHttpRequestSubmit(http_request, parameters);
    else http_request.send(null);
    if (browserNS && !async) {//
        if (callback != null) callback(http_request);
    }
}

function logout () {
    var sg;
    if (!loggedout)
        httpRequest ("logout.jsp?js=1", "text/javascript", function (http_request) {
            sg = eval(http_request.responseText);
        }, false);
    loggedout = true;
    return sg;
}

window.onbeforeunload = logout;

谁能告诉我在哪里告诉脚本它不必去根路径?

【问题讨论】:

    标签: javascript ajax jsp redirect activex


    【解决方案1】:

    脚本不直接声明重定向 - 它只是通过将 AJAX 调用作为函数评估它来处理对 logout.jsp?js=1 的响应 - 我猜你需要修改该响应文本(所以在你发布的脚本)让它重定向到你想要的位置。

    【讨论】:

    • 奇怪的行为是,如果我从按钮/链接调用相同的 logout() 函数,它会在执行后将用户带到预期的路径 (ww.someaddress.itdoesntexists/MyProjectName/)注销过程。
    • @GAS 你是如何调用函数来产生意外行为的?
    • 嗯,例如,当您重新加载页面 (F5) 时会发生这种情况。它会询问您是否要离开页面,如果是,它会将用户重定向到根路径。
    • @GAS 哪个页面?全部还是一个特定页面?是否只有在您退出后才刷新?另外,您能否发布来自 AJAX 调用的响应文本?
    • 有一个主页,动态包含其他页面。顺便说一句,您的第一个答案是正确的:我确实将响应重定向到了正确的位置。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-04
    • 2017-01-20
    • 1970-01-01
    • 2020-06-21
    相关资源
    最近更新 更多