GVKun编程网logo

检测Chrome中阻止的弹出窗口(检测chrome中阻止的弹出窗口是什么)

5

在这篇文章中,我们将为您详细介绍检测Chrome中阻止的弹出窗口的内容,并且讨论关于检测chrome中阻止的弹出窗口是什么的相关问题。此外,我们还会涉及一些关于Ajax请求后的Chromewindow

在这篇文章中,我们将为您详细介绍检测Chrome中阻止的弹出窗口的内容,并且讨论关于检测chrome中阻止的弹出窗口是什么的相关问题。此外,我们还会涉及一些关于Ajax请求后的Chrome window.open就像弹出窗口一样、Chrome OS 的弹出小窗口移植到 Chromium、Chrome 的 ASP.Net 弹出窗口、css – Chrome,Opera和Safari中的弹出菜单弹出的知识,以帮助您更全面地了解这个主题。

本文目录一览:

检测Chrome中阻止的弹出窗口(检测chrome中阻止的弹出窗口是什么)

检测Chrome中阻止的弹出窗口(检测chrome中阻止的弹出窗口是什么)

我知道可以检测其他浏览器是否阻止了弹出窗口的javascript技术。这是基本测试:

var newWin = window.open(url);if(!newWin || newWin.closed || typeof newWin.closed==''undefined''){    //POPUP BLOCKED}

但这在Chrome中不起作用。阻止弹出窗口时,永远不会到达“弹出窗口被阻止”部分。

当然,该测试在一定程度上是可行的,因为Chrome实际上并没有阻止弹出窗口,而是在右下角的最小化最小窗口中打开了该窗口,其中列出了“阻止的”弹出窗口。

我想做的就是能够确定弹出窗口是否被Chrome的弹出窗口阻止程序阻止了。我尝试避免浏览器对功能检测的嗅探。有没有办法做到这一点而无需浏览器嗅探?

编辑
:我现在已经尝试过利用的newWin.outerHeightnewWin.left以及其他类似性质的做到这一点。弹出窗口被阻止时,Google
Chrome会将所有位置和高度值返回为0。

不幸的是,即使实际打开了未知时间的弹出窗口,它也会返回相同的值。经过一段神奇的时期(在我的测试中是几秒钟),位置和大小信息将作为正确的值返回。换句话说,我离解决这个问题还差得远。任何帮助,将不胜感激。

答案1

小编典典

好吧,您所说的“魔术时间”可能是当弹出窗口的DOM已加载时。否则可能是当所有内容(图像,舷外CSS等)均已加载时。您可以通过在弹出窗口中添加非常大的图形来轻松测试(首先清除缓存!)。如果您使用的是jQuery之类的Javascript框架(或类似的东西),则可以使用ready()事件(或类似的东西)来等待DOM加载,然后再检查窗口偏移。这样做的危险在于Safari检测的工作方式相互矛盾:弹出窗口的DOM在Safari中永远不会ready(),因为它将为您要打开的窗口提供有效的句柄-无论它实际上是打开的还是打开的不。(实际上,我相信您上面的弹出式测试代码不适用于野生动物园。)

我认为您可以做的最好的事情是将测试包装在setTimeout()中,并在运行测试之前给弹出窗口3-5秒以完成加载。它不是完美的,但它至少应在95%的时间内正常工作。

这是我用于跨浏览器检测的代码,没有Chrome部件。

function _hasPopupBlocker(poppedWindow) {    var result = false;    try {        if (typeof poppedWindow == ''undefined'') {            // Safari with popup blocker... leaves the popup window handle undefined            result = true;        }        else if (poppedWindow && poppedWindow.closed) {            // This happens if the user opens and closes the client window...            // Confusing because the handle is still available, but it''s in a "closed" state.            // We''re not saying that the window is not being blocked, we''re just saying            // that the window has been closed before the test could be run.            result = false;        }        else if (poppedWindow && poppedWindow.test) {            // This is the actual test. The client window should be fine.            result = false;        }        else {            // Else we''ll assume the window is not OK            result = true;        }    } catch (err) {        //if (console) {        //    console.warn("Could not access popup window", err);        //}    }    return result;}

我要做的是从父级运行此测试,并将其包装在setTimeout()中,从而使子窗口加载3-5秒。在子窗口中,您需要添加一个测试功能:

功能测试() {}

弹出窗口阻止程序检测器进行测试,以查看“ test”功能是否作为子窗口的成员存在。

2015年6月15日新增:

我认为处理此问题的现代方法是使用window.postMessage()来让孩子通知父窗口已经加载。这种方法是相似的(孩子告诉父母它已经加载了),但是通信方式已经得到了改善。我可以从孩子那里进行跨域操作:

$(window).load(function() {  this.opener.postMessage({''loaded'': true}, "*");  this.close();});

父母使用以下方式收听此消息:

$(window).on(''message'', function(event) {       alert(event.originalEvent.data.loaded)});

希望这可以帮助。

Ajax请求后的Chrome window.open就像弹出窗口一样

Ajax请求后的Chrome window.open就像弹出窗口一样

我遇到一种情况,当用户按下按钮时,我会执行ajax请求,然后使用ajax请求的结果生成要在新选项卡中打开的URL。但是,在chrome中,当我在ajax请求的成功处理程序中调用window.open时,它将在新窗口中像弹出窗口一样打开(并被popup-
blockers阻止)。我的猜测是,由于成功代码与chrome认为不是由点击触发的点击处理代码是异步的,即使它与点击有因果关系。有什么方法可以防止这种情况,而无需使ajax请求同步?

编辑 以下是一些最小的代码来演示此行为:

$('#myButton').click(function() {
    $.ajax({
        type: 'POST',url: '/echo/json/',data: {'json': JSON.stringify({
            url:'http://google.com'})},success: function(data) {
            window.open(data.url,'_blank');
        }
    });
});

http://jsfiddle.net/ESMUA/2/

需要澄清的一点是:我更担心它是在单独的窗口而不是选项卡中打开,而不是因为它被弹出窗口阻止程序阻止了。

Chrome OS 的弹出小窗口移植到 Chromium

Chrome OS 的弹出小窗口移植到 Chromium

由于Chrome OS没有窗口这个概念,导致你无法同时看到两个窗口,结果Google想出了一个“弹出小窗口”的主意,通过一个可以在右下角弹出的叫做panel的小窗 口来显示类似Gtalk这种聊天网页应用。目前这一功能也开始像非Chrome OS操作系统移植,最新版的Chromium里已经可以通过“--enbale--panels”命令来激活这一功能了,不知道为什么现在还无法通过 “about:flags”实验室激活。

在激活panels功能之后,到Chrome Web Store里安装官方的Google Talk网页应用,然后你会发现它出现在了一个额外打开的小窗口里,跟Chrome的窗口是独立的。不过它的功能现在还仅限文字聊天,视频和音频聊天因为要调用插件还做不到。

Google此举看起来是想让你在非Chrome OS的操作系统里也能得到完整的Chrome OS体验,如果你习惯了在Gmail里的Gtalk里聊天,你也许会喜欢上它。但如果你整天都挂着Gtalk本地应用的话,何必如此自虐呢?

Via Download Squad

Chrome 的 ASP.Net 弹出窗口

Chrome 的 ASP.Net 弹出窗口

如前所述,几乎所有浏览器都对弹出窗口进行了限制。这让网络开发者的工作变得更加困难。

有两种好方法。我根本不喜欢使用引导程序对话框,但他们倾向于根据 div 等的类设置“自行完成工作”类型的交易 - 真的很难调试。

由于现在几乎所有站点都包含用于 js 代码的 jQuery,因此我非常建议您引入 jquery.UI。它有很多不错的东西,比如日期选择器等。但它也有一个相当不错的对话框弹出选项。他们只是工作,当你编码它们时?他们遵循“正常”之类的代码方法。

不太清楚您的消息/对话框是否在单击按钮(并回发)后弹出,并且在该过程结束时,您需要/想要显示一些对话框消息。但总而言之,对于您需要的对话框/消息,我强烈推荐 jQuery.UI。

jQuery.UI 在大多数情况下期望您想要“显示/弹出”的内容存在于当前现有页面的一个简单 div 中。但是,如果您提供另一个现有网页的对话框,它也能很好地工作。唯一要记住的真正的大问题?您弹出的那个对话框页面无法处理多个回发。 (因此,该对话框中的某些按钮或 ONE 回发很好 - 但您只能获得 ONE 回发。 因此,如果该页面显示允许一些输入或一些交互,并且只需要一次回发,那么 jQuery.UI 又是很棒的。如果该弹出页面需要多个按钮和多个回发,那么您将陷入痛苦和伤害的世界 - jQuery.UI 对话框(与大多数一样)无法生存或处理多个回发。任何回发都意味着对话框关闭(折叠)。因此,在这些情况下,如果您需要/拥有/希望该页面具有多个活动的回发按钮或事件,则必须采用 ajax 调用(网络方法)。

因此,您甚至可以在您的母版页中拥有/放置一个脚本,以及您的注册脚本可以调用的少量函数代码存根。

或者,我想你可以注入整个脚本,但脚本看起来像这样:

所以,pop 页面实际上被推到了一个 div 中。所以我们有一个“持有”页面的 div。

jQuery.UI 代码脚本如下所示:

 <div id="poppagearea">

 </div>
    <script>
        function showpage() {

            var mydiv = $(''#poppagearea'');
            mydiv.dialog({
                autoOpen: false,modal: true,title: ''My cool other page'',width: ''30%'',position: { my: ''top'',at: ''top+150'' },buttons: {
                    ''ok'': function () {
                     mydiv.dialog(''close'');
                     alert(''user click ok'');
                    },''cancel'': function () {
                        mydiv.dialog(''close'');
                        alert(''user click cancel'');
                    }
                }
            });
            mydiv.load(''Default.aspx'');
            // Open the dialog
            mydiv.dialog(''open'');
        }

因此,在上面,我们将“default.aspx”加载到该对话框中,从而将其显示在页面上。

所以,我会考虑 jQuery.UI - 但这确实意味着在您现有的项目中采用一个新的 js 库。

弹出页面确实使整个页面变灰,并且您确实获得了一个标题栏,以及您自己的“确定”、“取消”按钮。因此,上面看起来像这样:

enter image description here

所以,它做得很好 - 但如前所述,该页面只能有一个回传,并且它不能是一个具有大量按钮和回传的通用 aspx 页面 - 但它会呈现和显示还不错。

css – Chrome,Opera和Safari中的弹出菜单弹出

css – Chrome,Opera和Safari中的弹出菜单弹出

我在以下位置创建了一个弹出式导航菜单: http://lixmebel.com – >在Галерия – > Проекти.在Firefox和Internet Explorer中一切正常 – 菜单弹出闪存.但在Chrome,Safari和Opera中,菜单背后是闪光灯.有想法该怎么解决这个吗 ?

解决方法

在你的< embed>中标记,添加以下行:wmode =“transparent”

<embed 
src="main.swf?xml_path=slides.xml" 
quality="high" 
width="560" 
height="480" 
name="tech" 
align="middle" 
allowscriptaccess="sameDomain" 
type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" 
wmode="transparent">

在Chrome中测试,完美运行:)

关于检测Chrome中阻止的弹出窗口检测chrome中阻止的弹出窗口是什么的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于Ajax请求后的Chrome window.open就像弹出窗口一样、Chrome OS 的弹出小窗口移植到 Chromium、Chrome 的 ASP.Net 弹出窗口、css – Chrome,Opera和Safari中的弹出菜单弹出等相关内容,可以在本站寻找。

本文标签: