【问题标题】:Click a link and use window.open() blocks one of the links单击一个链接并使用 window.open() 阻止其中一个链接
【发布时间】:2021-01-06 15:31:41
【问题描述】:

我正在尝试创建一个简单的 JS 函数,该函数将在单击特定按钮时打开一个新窗口/选项卡,因此用户实际上会打开 2 个窗口/选项卡,但是无论我做什么,其中一个链接都会得到被 Chrome 屏蔽为“弹出窗口被屏蔽”。

我想做这样的事情:

    $(document).ready(function(){
        $("a").mousedown(function(){
            window.open("https://stackoverflow.com/","_blank");
        });
    })
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<a href="https://google.com">Click Me!</a>

;

但是当我这样做时,按钮链接不起作用,但 JS 可以。 如果我更改 JS 并向其添加 setTimeout(),则按钮 URL 会通过,但 JS 会被阻止。 无论我做什么,我都无法让他们两个都通过。

任何帮助将不胜感激。

【问题讨论】:

    标签: javascript jquery google-chrome popup


    【解决方案1】:

    同时导航到两个地方,其中一个在新窗口中,非常受想要在新窗口中向用户展示大量广告的人的欢迎。

    大量广告不受用户欢迎,因此浏览器会采取措施防止这种行为。

    有时合法的用途会陷入交火。归咎于广告行业的黑帽终结。


    您需要找到其他方式来显示……无论您想向用户显示什么……而不涉及在单独的窗口中同时导航到多个网页。

    【讨论】:

      【解决方案2】:

      问题是由您正在使用的 mousedown() 事件引起的,该事件是向下+向上序列的一部分,用于触发 &lt;a&gt; 标记的 click() 事件。

      因此打开一个新窗口会“中断”流程,并且浏览器不再跟踪鼠标向上事件以跟随原始 url。

      所以解决方案是在不停止传播的情况下附加 click() 事件。这将触发附加事件和原始事件,并且它们都不会被阻止。

        $(document).ready(function(){
              $("a").click(function(){
                  window.open("https://stackoverflow.com/","_blank");
              });
          })
      

      您可以在 this page 上尝试示例,因为 stackoverflow sn-p 已被沙盒化并阻止弹出窗口

      【讨论】:

      • 显然试过了。不幸的是,同样的结果。
      • 那么您的问题不完整,因为我的代码按预期工作
      • “所以用户实际上会打开 2 个窗口/选项卡”——这就是问题所在。
      • 就像我说的你的问题不完整。您没有提供示例 html,您不确定是否要打开“新选项卡”或“新窗口”,并且您的问题清楚地表明只有两个链接中的一个会加载您的代码。所以我为你提供了一个加载两者的解决方案。
      • 以防万一您真的不仅想加载这两个页面,而且还想将它们都加载为“新标签” - 那么这是不可能的。现代浏览器确实可以阻止任何类似恶意软件的活动,并且每个新窗口只能通过用户交互(如鼠标单击)打开。因此,您在一个弹出窗口上浪费了您的第一次点击,并且......您无法通过一次鼠标点击触发两次用户点击,因此第二次点击被浏览器阻止。
      猜你喜欢
      • 2021-04-04
      • 2016-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多