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

时间:2012-08-21 16:45:25

标签: javascript ios mobile-safari

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

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

一种解决方案是检查是否存在Cookie,如果存在则不进行重定向,但这会留下用户点击另一个横幅广告但没有获得相应重定向的边缘情况。我尝试在URL上附加一个锚点,以防止用户启动刷新,但Safari的自动刷新机制不尊重以编程方式添加的哈希值。

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

2 个答案:

答案 0 :(得分:1)

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

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,并且不会重定向。新的横幅广告点击将没有该参数,因此它们将正常运行。

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

答案 1 :(得分:0)

如何在着陆页上添加javascript?

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

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