Javascript 该网站如何控制用户';是否在没有任何权限的情况下在选项卡之间导航?
打开时,单击“日历”链接将在新选项卡中打开。到目前为止一切正常 有趣的部分发生在点击这个新标签上的“邮件”标签时;它以某种方式将焦点重定向到原始选项卡!这两个选项卡现在是“并列”的,单击每个选项卡中的“邮件/日历”会将另一个选项卡置于焦点位置 我假设这是通过一些JavaScript向导实现的。有趣的是,重新打开其中一个选项卡会丢失这种“绑定”状态,因此我假设它与打开新选项卡的方式有关。我确实试着研究了一个网站如何控制标签,但所有的结果都表明这是不可能的 如果没有视频/gif,很难完全解释这种行为,但我的问题基本上是: 网站如何控制浏览器选项卡之间的导航?Javascript 该网站如何控制用户';是否在没有任何权限的情况下在选项卡之间导航?,javascript,outlook,tabs,Javascript,Outlook,Tabs,打开时,单击“日历”链接将在新选项卡中打开。到目前为止一切正常 有趣的部分发生在点击这个新标签上的“邮件”标签时;它以某种方式将焦点重定向到原始选项卡!这两个选项卡现在是“并列”的,单击每个选项卡中的“邮件/日历”会将另一个选项卡置于焦点位置 我假设这是通过一些JavaScript向导实现的。有趣的是,重新打开其中一个选项卡会丢失这种“绑定”状态,因此我假设它与打开新选项卡的方式有关。我确实试着研究了一个网站如何控制标签,但所有的结果都表明这是不可能的 如果没有视频/gif,很难完全解释这种行
我使用的是Chrome x64 71.0.3578.98。基于所有选项卡都属于同一个域(outlook.com),因此浏览器允许它们之间进行某种形式的通信。下面是一个使用轮询
window.localStorage
的简单机制:
onUserClickCalendar(() => {
window.localStorage.setItem('focus', 'calendar');
});
function checkForTabFocusUpdate() {
const focus = windows.localStorage.getItem('focus');
if (focus !== currentFocus) {
switchTabFocus(focus);
}
}
setInterval(checkForTabFocusUpdate, 100);
如果一个窗口打开另一个窗口,您可以使用以下方法在它们之间来回切换焦点:
// Open new window from current window
let yourTabName = window.open("google.com");
// Focus parent window, from new window
window.opener.focus();
// Focus new window, from parent window
yourTabName.focus();
下面是一个提琴示例(请确保允许弹出窗口):
如果你运行小提琴,你会看到它打开了一个新的标签。然后您可以返回到fiddle选项卡并单击HTML按钮,焦点应该转到刚刚打开的选项卡
我怀疑这就是他们正在做的事情,因为当你点击“日历”按钮时,你实际上是在从现有窗口打开一个新窗口,这将允许你调用上述方法。我认为这可以通过cookie、本地存储甚至与WebSocket或HTTP请求的远程连接来完成,但我不是100%确定。返回对已打开选项卡的引用,作为回报,它将接收对的反向引用。这看起来确实很接近,但此新选项卡如何将焦点设置回原始选项卡?只要新选项卡是从原始选项卡打开的,您就可以使用
window.opener.focus()
将焦点切换回原始选项卡<代码>窗口。opener指的是打开的窗口。明白了,这似乎是解决方案。当我能回答的时候,我会标记为答案,谢谢。没问题!很乐意帮忙。我相信你已经知道了,但以防万一--你可以阅读更多关于这些方法的内容。很有趣,谢谢。我很难找到谷歌的答案,下次我也会看看这里。我不是一个特别的网络开发者(Android,和你一样),只是好奇而已。再次感谢。什么是switchTabFocus
,对不起?这似乎解释了如何在选项卡之间传输数据,但我还不了解焦点切换。