如何检测新标签页是否从当前页面打开

时间:2019-01-04 13:39:23

标签: javascript

我正在编写一个JavaScript脚本,可以从中检测当前站点中的用户活动。因此,在该站点中,用户可以单击将其扔到带有链接的新选项卡的框。 该链接是动态的

  

我需要在我的数据库中记录该链接,该链接在新选项卡中打开,而且我也不知道它是通过单击还是任何其他函数打开的。在我的情况下,单击按钮然后再调用一个函数通过链接打开窗口标签。即在该函数上单击window.open(data.link)

从当前页面打开新标签页时,是否有任何方法可以调用函数?

更新

以下答案确实帮助我跟踪了与目标 _blank 的链接,但是当目标不存在时它没有用。另外,就我而言,我决定选项卡也将从功能中打开,因此我通过覆盖window.open函数

来解决该问题
    window.open = function(url, name, features, replace) {
    alert("opening a window");
    // do other stuff here}

只要从window.open函数打开新标签页,就会调用此事件!

希望它对其他人也有帮助!

2 个答案:

答案 0 :(得分:1)

使用JavaScript将EventListener添加到所有a元素中。

如果元素具有target="_blank",或者按下了快捷键,例如ctrl,则可以放心地假设单击的链接将在新的标签/窗口中打开。

event.target.href是您需要使用AJAX添加到数据库中的URL。

// loop all `a` elements, adding click event listeners
document.querySelectorAll("a").forEach(element => {
  element.addEventListener("click", event => {

    // is `target="_blank"`
    const isTargetBlank = event.target.target === "_blank";

    // is shortcut key held
    const isShortcutKeyPressed = event.ctrlKey || event.shiftKey || event.metaKey;

    // If target is blank or shortcut key pressed or middle mouse button pressed
    if (isTargetBlank || isShortcutKeyPressed) {
      alert(`Opened in new tab: ${event.target.href}`);

      // ...
      // Save `event.target.href` URL using AJAX
    }
  });
});
<a href="https://www.stackoverflow.com">Same Tab</a>
<a target="_blank" href="https://www.google.com">New Tab</a>

答案 1 :(得分:-1)

第一件事。您将需要实现一个function来处理页面打开:

function openedInNewTab(element) {
    //Get the element's URL and store it
}

现在,您需要为点击事件添加EventListener,然后在其中调用openedInNewTab