防止从浏览器到应用商店的不需要的重定向

Preventing unwanted redirects from browser to app store

本文关键字:不需要 重定向 应用 浏览器      更新时间:2023-09-26

我一直在开发一个位于广告和应用商店之间的重定向页面。广告以指向重定向页面的静态URL形式存在。重定向页面向第三方发送ajax请求,设置cookie,然后重定向到AppStore。一切都很好,并不罕见。

重定向页面无法自行关闭,因此它仍然是Safari中的一个选项卡。我遇到的问题是,当用户返回Safari时,如果页面已从缓存中清除,Safari将重新加载它,从而触发重定向。我不希望用户被意外地扔进AppStore。

一种解决方案是检查cookie的存在,如果存在则不重定向,但这会导致用户点击另一个横幅广告而无法获得适当的重定向。我曾尝试在URL上添加一个锚点,以防止用户启动刷新,但Safari的自动刷新机制不尊重程序添加的哈希。

如果我可以使用动态源来生成将用户引导到页面的URL,我可以生成时间戳,但现在原始URL是静态的。有人能用客户端代码解决这个问题吗?或者这真的只能使用服务器端解决方案来解决吗?

我最终选择了进行两阶段重定向。用户点击横幅并被引导到:

http://myserver.example.com?someKey=someValue

我有一个功能可以做到这一点:

// Do I have a visited param?
if ($.url(window.location.href).param('visited') === '1') {
    // Do I have a visited cookie?
    if (helper.retrieveCookie('VISITED') == undefined) {
        console.log('Setting visited cookie');
        helper.storeCookie('VISITED', '1');
        return 1; // Redirect to AppStore.
    }
    // Have param and cookie
    console.log('VISITED cookie set');
    console.log('Refreshed');
    return 2; // Don't redirect.
} else {
    // No param
    helper.removeCookie('VISITED');
    return 0; // Redirect to self with &visited=1
}

因此,基本上,我们将有意义地通过代码两次,随后由于刷新而通过N次。在第一次传递过程中,我们执行AJAX请求,然后用添加的参数重定向到我们自己。在第二次传递过程中,我们设置了一个cookie并重定向到AppStore。页面的任何后续加载都将同时具有cookie和param,并且不会重定向。新的横幅点击将没有参数,因此它们将正常执行。

这不是最漂亮的解决方案,因为我们必须重新加载重定向页面,但由于其内容应该被缓存,因此命中率应该最低。

在登录页上添加一个javascript怎么样?

if (history.length < 2) 
  history.back();
else
  location.href = '/thankyoufordownloading.htm';

我自己还没有测试过,但它可以工作。