打开新标签时检查是不是启用了弹出窗口阻止程序

     2023-02-27     139

关键词:

【中文标题】打开新标签时检查是不是启用了弹出窗口阻止程序【英文标题】:Check if pop-up blocker is enbled when open new tab打开新标签时检查是否启用了弹出窗口阻止程序 【发布时间】:2017-02-06 11:13:26 【问题描述】:

我想在 chrome 中的 new process/context 中打开新窗口,(我不确定 window.open 是否可行,但下面的示例可以正常工作)如果它是常规窗口,你可以用下面的例子检查一下是否启用了弹窗拦截器

ar newWin = window.open(url);             

if(!newWin || newWin.closed || typeof newWin.closed=='undefined') 
 
     //POPUP BLOCKED

但我想在 新进程 中打开新窗口,而不用 window.open,如下所示

var prod = document.getElementById("myElement"); 
var aTag = document.createElement('a');
aTag.setAttribute('href',"http://cnn.com");
//THIS TWO LINES do the job
aTag.setAttribute('rel',"noreferrer");
aTag.setAttribute('target',"_blank");
prod.appendChild(aTag);
aTag.click();
prod.removeChild(aTag);

与此参考一起使用: http://news.softpedia.com/news/Force-Google-Chrome-to-Open-Links-in-New-Processes-128962.shtml

从帖子中打开您应该使用的新上下文中的新标签:

  aTag.setAttribute('rel',"noreferrer");
  aTag.setAttribute('target',"_blank");

虽然这有效,但有时新窗口/标签会被弹出窗口阻止程序阻止,我只想知道这一点并在内部通知用户新窗口被阻止并请启用它...哪个选项可以我有吗?

我的要求是这样的:

    在新进程/上下文中打开窗口 如果弹出窗口阻止程序被阻止,请通知用户

怎么做?

更新

我需要它,因为当您单击以从现有窗口打开新窗口并打开第二个窗口并返回到第一个/源窗口并且您想做某事时它被 阻止!

为了模拟这个,你可以创建这个简单的文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>BlockTAB</title>
</head>

<br/>
<br/>
<button onclick="windowOpen('http://cnn.com')">window open native</button>
<br/>
<br/>
<button onclick="windowOpen('http://google.com')">sample</button>

<script>
    function windowOpen(url)
        window.open(url);
    

</script>
</html>

现在进行以下操作

    运行程序(html 文件),这将打开 CNN 选项卡 检查 CNN 选项卡并在其上放置断点(在源选项卡中您可以找到 javascript,将其放在您选择的任何位置),直到它停止 (您需要刷新页面,直到看到调试器停止... 现在回到第一个选项卡,如果两个按钮都在,您会看到它被阻止,您无法执行单击等操作...

如何处理打开新标签而不阻塞第一个/源标签?

更新 2

如果使用

的代码没有发生弹出窗口阻止程序,则有一种方法可以模拟弹出窗口阻止程序

aTag.setAttribute('rel',"noreferrer"); aTag.setAttribute('target',"_blank");

将以下代码添加到前面的示例中

<script src="https://cdn.jsdelivr.net/bluebird/3.4.5/bluebird.js"></script>
<br/>
<br/>
<button onclick="EnabledPPB('http://cnn.com')">Blocker</button>

function delayFN(url) 
    Promise.delay(500)
        .then(function() 
            var newWin = window.open(url);
        )


function EnabledPPB(url) 
    Promise.delay(100)
        .then(function() 
            delayFN(url);
        )


【问题讨论】:

ETag 与此有什么关系?是的,人为触发的链接点击也可以被弹出窗口拦截器捕获 - 这是一件好事,因为否则douchevertisers也会使用这种技术。 @CBroe - 抱歉我的错误这与 Etag 无关...有一种方法可以知道这一点?我只是想从我的代码中知道我可以告诉用户禁用它,这是内部应用程序...\ @CBroe - 除了向用户提供一些信息外,我不想做任何事情,因此当用户单击打开窗口时我需要以某种方式知道这一点...... 那你为什么不想使用window.open呢?由于这是一个方法调用,它有一个可以检查的返回值。单击链接没有任何返回值,因此使用此方法进行可比较的检查会更加复杂(如果可能的话)。 @CBroe - 谢谢,所以有办法使用 window open 在新进程中打开它? 【参考方案1】:

不太确定您是否要确保打开一个新窗口或新进程,所以也许我会同时回答。

如果你的字面意思是你想确保 Chrome 启动一个新进程,那么在 Javascript 中没有办法做到这一点,甚至你用window.open 显示的代码也不行。但是,由于 Chrome 正在为每个选项卡打开一个新进程,因此只要您的用户使用 Chrome,就可以安全地假设您的消息处于一个新进程中。另一方面,检查您的用户正在使用的浏览器是可能的。尽管您的用户可能仍然伪造用户代理(即浏览器),但对于内部使用来说应该足够了。

More reference on Chrome using new process instead of new thread for each tab.

如果您想确保您的用户在新窗口中打开您的消息,带有window.open 的窗口是唯一的选择。您可以通过添加事件侦听器来触发window.open,或者简单地使用HTML 中的onclick 属性。没有办法单独使用 HTML,当您已经找到使用 javascript 的方法时,应该没有理由搜索答案?

【讨论】:

谢谢,这不是解决问题,请参考本文第3段blog.chromium.org/2008/09/multi-process-architecture.html,链接进程阻止源进程做任何操作,我会尽快更新我的帖子更好地解释它。谢谢! 请看我更新的帖子,看看能不能帮忙,谢谢! 对我来说,它似乎与浏览器的行为更相关。浏览器上的 Javascript 几乎无法控制低级行为,例如按进程或线程打开选项卡。如果只是为了调试,那么在这种情况下使用 Firefox 怎么样? 是的,这与 chrome 有关,并且不会在 Firefox 中发生,但我需要找到一些解决 chrome 的方法(因此我标记了 chrome :)),你是否能够在第一页遇到阻塞时调试?我在帖子的请求中输入的代码(带有 noreffer 和空白)解决了它,但我想用它来查找是否启用了弹出窗口阻止程序......任何如何优雅地处理它的想法都会非常有帮助......谢谢! 我无法重现您的问题。调试器对我来说效果很好。 (我正在使用 Chrome 53.0.2785.116 m )。我想也许更新会解决问题?或者混合你提到的两种方法怎么样?使用 window.open 检查是否有弹出块(使用自动关闭的 javascript 打开页面?),然后使用第二种方法打开真实窗口。

ie8怎么把已经允许弹出的窗口重新阻止该窗口弹出呢?

IE8启用和禁用弹出窗口。1、打开IE浏览器,按Alt调出隐藏的菜单选项,单击“工具”,找到弹出窗口阻止程序,默认已经开启弹出窗口阻止程序。2、单击“关闭窗口阻止程序(B)”,选择“是”即可关闭。3、再次找到“弹出窗口... 查看详情

在新窗口中打开url(不触发弹出窗口阻止程序)

JavascripttoopenaURLinanewwindowwithouttriggeringabrowser'spop-upblocker.(Maynotworkincallbacks,butnotsurewhy.)varnewWin=window.open();newWin.location=href; 查看详情

javascript在新窗口中打开url(不触发弹出窗口阻止程序)(代码片段)

查看详情

在新窗口中打开页面而不阻止弹出窗口

】在新窗口中打开页面而不阻止弹出窗口【英文标题】:Openpageinnewwindowwithoutpopupblocking【发布时间】:2011-10-3115:10:33【问题描述】:希望您能在这里提供一些帮助...我有一个表单,可以翻译字段中的单词,用翻译后的术语填充字... 查看详情

为啥javascript触发提交表单(方法获取,目标空白)打开弹出窗口而不是新标签?

】为啥javascript触发提交表单(方法获取,目标空白)打开弹出窗口而不是新标签?【英文标题】:Whyjavascripttriggeredsubmitform(methodget,targetblank)openspopupinsteadnewtab?为什么javascript触发提交表单(方法获取,目标空白)打开弹出窗口而... 查看详情

ie9怎么设置阻止弹出窗口

...详细设置了追问IE9里我没看到有弹出窗口阻止程序啊追答打开IE9窗口,然后按键盘上的ALT键,会看到菜单栏。里面有工具选项本回答被提问者采纳 查看详情

打开新标签页/新窗口时自动打开 Chrome 开发者工具

】打开新标签页/新窗口时自动打开Chrome开发者工具【英文标题】:AutomaticallyopenChromedevelopertoolswhennewtab/newwindowisopened【发布时间】:2012-08-2602:29:38【问题描述】:我有HTML5应用程序,通过单击链接在新窗口中打开。每次我想记录... 查看详情

在 Chrome 中一次打开多个链接作为新标签页

】在Chrome中一次打开多个链接作为新标签页【英文标题】:OpenmultiplelinksinChromeatonceasnewtabs【发布时间】:2014-08-1309:16:45【问题描述】:我正在尝试在GoogleChrome的新标签页中一次打开多个链接,但失败了。问题:被弹出窗口阻止... 查看详情

强制 Firefox 打开新标签而不是新窗口

】强制Firefox打开新标签而不是新窗口【英文标题】:ForceFirefoxtoopennewtabandnotnewwindow【发布时间】:2015-06-1111:48:52【问题描述】:我的应用程序有时会在浏览器中打开URL。我用Process.Start("http://www.example.com")做这个。我的默... 查看详情

弹出窗口出现时如何阻止标签栏项目变灰

】弹出窗口出现时如何阻止标签栏项目变灰【英文标题】:howtostoptabbaritemsfromturninggreywhenpopoverappears【发布时间】:2018-06-0715:03:40【问题描述】:我在我的一个视图控制器中显示一个弹出框控制器。每当弹出框出现时,活动标签... 查看详情

检查弹出窗口是不是关闭

】检查弹出窗口是不是关闭【英文标题】:Checkifapopupwindowisclosed检查弹出窗口是否关闭【发布时间】:2011-09-1000:43:54【问题描述】:我正在用打开一个弹出窗口varpopup=window.open(\'...\',\'...\');此javascript是在控件中定义的。然后从网... 查看详情

我的窗口。打开一个新窗口而不是一个新标签

】我的窗口。打开一个新窗口而不是一个新标签【英文标题】:Mywindow.openopenanewwindowinsteadofanewtab【发布时间】:2014-10-1506:24:01【问题描述】:执行window.open时,我想打开一个新选项卡,但在我的页面中它会打开一个新窗口。如何... 查看详情

怎么关闭广告拦截插件?

...选择总是允许此站点的弹出窗口直接点击就可以了。2、打开IE,选择菜单栏的工具,然后选择internet选项,然后再选择隐私,在那一栏可以看到弹出窗口阻止程序。取消“启用弹出窗口阻止程序”前面的勾即可。3、在IE浏览器的... 查看详情

打开 Bootstrap 模式弹出窗口时启用背景

】打开Bootstrap模式弹出窗口时启用背景【英文标题】:EnablebackgroundwhenopenBootstrapmodalpopup【发布时间】:2016-05-2502:58:40【问题描述】:我在我的项目中使用了Bootstrap的模态弹出窗口,并且想要以下内容:当打开模式弹出窗口并单... 查看详情

获悉点击了弹出窗口中的哪个按钮

】获悉点击了弹出窗口中的哪个按钮【英文标题】:Getinformedwhichbuttoninpopupwindowhasbeenclicked【发布时间】:2013-10-0709:38:02【问题描述】:我正在尝试实现我的小型android应用程序的一项功能。有一个图像按钮,当我单击它时会出现... 查看详情

在 GWT 应用程序中打开新的浏览器窗口被阻止

】在GWT应用程序中打开新的浏览器窗口被阻止【英文标题】:OpeningnewbrowserswindowblockedinsideGWTapplication【发布时间】:2011-07-2614:36:04【问题描述】:在我的gwt中,当触发clickEvent时,我使用部署在服务器上的rpc创建了一个webapp,并... 查看详情

怎么设置ie8弹出窗口在新标签里显示

...把我正在浏览的网页换成谷歌搜索,怎么设置在新标签里打开呀参考技术A打开IE浏览器,点窗口右上方的“工具”,选“internet选项”,在“选项卡”那里选“设置',然后再“遇到弹出窗口时”那里选“始终在新选项中打开... 查看详情

如何在弹出窗口中打开新选项卡?(代码片段)

...。但是,我需要从新窗口(弹出窗口)中弹出一个按钮,打开一个新选项卡。但我不需要在主浏览器中打开新选项卡,我希望它在同一个弹出窗口中打开。这可能吗?我该怎么做?我显示了弹出代码和重定向代码,目前,它们将... 查看详情