Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 该网站如何控制用户';是否在没有任何权限的情况下在选项卡之间导航?_Javascript_Outlook_Tabs - Fatal编程技术网

Javascript 该网站如何控制用户';是否在没有任何权限的情况下在选项卡之间导航?

Javascript 该网站如何控制用户';是否在没有任何权限的情况下在选项卡之间导航?,javascript,outlook,tabs,Javascript,Outlook,Tabs,打开时,单击“日历”链接将在新选项卡中打开。到目前为止一切正常 有趣的部分发生在点击这个新标签上的“邮件”标签时;它以某种方式将焦点重定向到原始选项卡!这两个选项卡现在是“并列”的,单击每个选项卡中的“邮件/日历”会将另一个选项卡置于焦点位置 我假设这是通过一些JavaScript向导实现的。有趣的是,重新打开其中一个选项卡会丢失这种“绑定”状态,因此我假设它与打开新选项卡的方式有关。我确实试着研究了一个网站如何控制标签,但所有的结果都表明这是不可能的 如果没有视频/gif,很难完全解释这种行

打开时,单击“日历”链接将在新选项卡中打开。到目前为止一切正常

有趣的部分发生在点击这个新标签上的“邮件”标签时;它以某种方式将焦点重定向到原始选项卡!这两个选项卡现在是“并列”的,单击每个选项卡中的“邮件/日历”会将另一个选项卡置于焦点位置

我假设这是通过一些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
,对不起?这似乎解释了如何在选项卡之间传输数据,但我还不了解焦点切换。