OnClick 和新标签打开,重定向(页面可见性 API)

OnClick and New Tab Opened, Redirect (Page Visibility API)

当有人点击我们网站上的广告(在 IFrame 中)中的 link 时,我正在尝试创建重定向(到感谢页面)。我想我可以通过一个简单的 onclick 事件结合检测是否打开了新选项卡来做到这一点,因为我无法在 iframe 中监听 links 上的 onclick。我找到了页面可见性 API,这似乎是正确的使用方法(因为当他们点击 iframe 时 .blur 被激活,即使他们点击 iframe 中的白色 space 而不是URL) 但我发现的所有脚本都太复杂了,我无法解码和简化成我可以使用的东西。这是我想做的事的一个例子,我认为应该行得通,但似乎行不通。

document.onclick = function() {
    if (document.hidden) {
        console.log("New window opened");
        window.location.replace("www.example.com/thanks");
    } else {
        console.log("Click");
        // Do nothing
        return;
    }
}

当我点击页面时,我确实得到了 "click" 响应,但是当我点击 link 并打开一个新的 window 时,我没有被重定向,也没有我会得到重定向吗?

编辑:我现在明白我的问题是我在 iframe 中根本没有检测到任何点击,即使使用整个文档侦听器也是如此。有解决这个问题的好方法吗?

好的!通过更多的反复试验,我实际上能够自己解决这个问题。这是我如何做到的示例:

$(window).blur(function() {
    setTimeout(function() {
        if (document.hidden) {
            window.location.replace("https://example.com/thanks");
        } else {
            window.self.focus();
        }
    }, 200);
});

使用 window.blur 而不是 window.onclick 成功了,所以我确信有人在 iframe 中点击了。如果他们在 iframe 中单击,我会检查 window 是否可见。如果是,那么他们就没有打开新选项卡,我将 window 重新设置为焦点,以防他们再次在 iframe 中单击。如果他们确实打开了一个新标签(window 被隐藏),那么我会将他们发送到我们的感谢页面!我还设置了一个 breif 超时,让浏览器有时间识别 window 是隐藏的(没有这个它是行不通的!)。