我正在开发纯粹在JavaScript中的OAuth身份验证流程,我想在弹出窗口中向用户显示"授予访问权限"窗口,但它会被阻止.
如何防止由不同浏览器的弹出窗口阻止程序阻止弹出窗口window.open
或被window.showModalDialog
其阻止?
我想在超链接的单击事件上有条件地显示JQuery对话框.
我有条件,例如在条件1上打开一个JQuery对话框,如果不满足条件1,则导航到由'href'标签引用的页面,该标签的点击事件有问题.
我能够在链接的点击事件上调用一个函数.此函数现在通过执行另一个URL(执行我的Spring控制器并返回响应)来检查所述条件.
所有的作品都只有window.open被弹出窗口拦截器阻挡.
$('a[href*=/viewpage?number]').live('click', function(e) {
e.preventDefault();
redirectionURL = this.href;
pageId= getUrlVars(redirectionURL)["number"];
$.getJSON("redirect/" + pageId, {}, function(status) {
if (status == null) {
alert("Error in verifying the status.");
} else if(!status) {
$("#agreement").dialog("open");
} else {
window.open(redirectionURL);
}
});
});
Run Code Online (Sandbox Code Playgroud)
如果我e.preventDefault();
从代码中删除,popoup阻止程序不会阻止页面,但是对于condition1,它会打开对话框并打开'href'页面.
如果我解决了一个,它会为另一个人带来问题.我无法同时兼顾两种情况.
你能帮我解决这个问题吗?
一旦这个问题得到解决,我还有另外一个问题需要解决,即导航对话的OK事件:)
在我的网站上有一个按钮,用于调用一个调用的函数window.open
,但是,最近在弹出窗口打开之前需要进行调整以进行服务器端检查.
自从添加了代码进行AJAX调用之后,浏览器就会阻止弹出窗口,这是在success
AJAX调用的回调中打开的.我读过,如果没有用户点击事件调用,浏览器可能会阻止弹出窗口,所以我尝试将AJAX请求设置为async: false
,这解决了Firefox中的问题,但谷歌Chrome仍然阻止我的弹出窗口.有没有办法解决这个问题?
我可以将服务器端检查移动到弹出窗口中打开的页面,但是如果可能的话,我想在打开弹出窗口之前执行此操作.
码:
<a id="attackButton" href="#">Attack Base!</a>
<script type="text/javascript">
$(function() {
$('#attackButton').click(function() {
$.ajax({
url: baseurl + '/index.php?option=com_pbbgs&format=raw&getinfo=goingame',
data: { 'gameid': 618 },
dataType: 'text',
async: false,
type: 'POST',
success: function(data) {
eval(data);
if (window.gameURL) {
goingameRaw();
}
}
});
return false;
});
});
function goingameRaw()
{
window.open(window.gameURL,'test','left=20,top=20,width=1024,height=640,toolbar=0,resizable=0,location=0');
}
</script>
Run Code Online (Sandbox Code Playgroud)
响应体示例:
window.gameURL="http://mydomain.com/index.php?option=com_pbbgs&format=raw&startgame=618&width=1024&height=640";checktutorial('js','attack');
Run Code Online (Sandbox Code Playgroud) 我有一个页面,使用户能够通过HTML5画布执行图像处理,在页面上,有一个Facebook分享按钮,用于在Facebook上共享生成的画布图像.
单击链接时,会向服务器(ASP.NET MVC)发送ajax请求以执行映像生成,将映像保存在服务器上,然后生成作为ajax返回的URL(链接到映像)响应.返回的url是我想要传递的Facebook要分享的参数.问题是,当我调用"window.open"时,弹出窗口阻止程序阻止了facebook共享对话框.
有没有其他方法可以在没有弹出窗口阻止程序的情况下打开新选项卡.我相信,既然用户发起了动作,我应该有办法绕过弹出窗口拦截器.谢谢.
我需要知道用户点击触发的按钮,window.open
如果有稳定的API /预先知道用户是否主动拥有弹出窗口阻止程序?
在某些情况下,用户不知道/注意他们有弹出窗口阻止程序(阻止新窗口).我想通过点击允许来通过一些对话框/或者某些东西来通知他们.
我在堆栈溢出中搜索了很多问题,可能在这里 重复检测Popup
但not helped for me
同时,在测试中铬(测试v26.0.1410.64)
下面的方法Worked in IE and Firefox
,但not in Chrome
var popup = window.open(winPath,winName,winFeature,true);
if (!popup || popup.closed || typeof popup.closed=='undefined'){
//Worked For IE and Firefox
alert("Popup Blocker is enabled! Please add this site to your exception list.");
window.location.href = 'warning.html';
} else {
//Popup Allowed
window.open('','_self');
window.close();
}
Run Code Online (Sandbox Code Playgroud)
任何适用于Chrome的更好的解决方案呢?
我想在chrome的新进程/上下文中打开新窗口(我不确定是否可以使用window.open,但下面的示例是可行的)当前如果是常规窗口,您可以查看以下示例并查看是否弹出窗口阻止程序已启用
ar newWin = window.open(url);
if(!newWin || newWin.closed || typeof newWin.closed=='undefined')
{
//POPUP BLOCKED
}
Run Code Online (Sandbox Code Playgroud)
但我想在没有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);
Run Code Online (Sandbox Code Playgroud)
与此参考文献一起使用:http: //news.softpedia.com/news/Force-Google-Chrome-to-Open-Links-in-New-Processes-128962.shtml
从帖子打开新上下文中你应该使用:
aTag.setAttribute('rel',"noreferrer");
aTag.setAttribute('target',"_blank");
Run Code Online (Sandbox Code Playgroud)
虽然这有效,但有时新的窗口/标签会被弹出窗口阻止程序阻止,我只是想知道这一点,并在内部通知用户新窗口被阻止,请启用它...我有哪个选项?
我的要求是这样的:
- 在新流程/上下文中打开窗口
- 如果阻止弹出窗口阻止程序通知用户
怎么做?
UPDATE
我需要它,因为当您单击从现有窗口打开新窗口并打开第二个窗口并返回第一个/源窗口并且您想要执行某些操作时会被阻止!
要模拟这个,您可以创建这个简单的文件
<!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);
} …
Run Code Online (Sandbox Code Playgroud) 我正在使用Capybara/RSpec编写一些自动化测试,我通过使用这一点ruby来选择/配置驱动程序:
Capybara.register_driver :selenium_chrome do |app|
Capybara::Selenium::Driver.new(app, :browser => :chrome)
end
Run Code Online (Sandbox Code Playgroud)
我正在测试我点击的按钮是否打开弹出窗口,窗口是否显示应该显示的内容.问题是当测试打开窗口时,Google Chrome弹出窗口阻止程序会阻止它,导致测试失败.从选项菜单中禁用阻止程序不起作用.另外,我担心一旦我在服务器上运行它们就会导致同样的问题.
有没有办法自动禁用测试的弹出窗口?
谷歌Chrome现在有点奇怪,因为v25不再尊重302重定向标题,并且在页面刷新时愉快地重新发布表单数据,而v24和所有其他浏览器都很好用.我不确定这只是一个临时的浏览器错误,所以让我描述一下我想要解决的谜团.
据我所知,您无法使用HTML或JavaScript打开选项卡,但默认情况下,没有显式设置维度的新窗口将作为选项卡打开.
首先我试过这个:
<a href="URL" onclick="window.open(this.href);return false">
<img src="NICE IMAGE" alt="foo">
</a>
Run Code Online (Sandbox Code Playgroud)
这在任何地方都有效,除了在Chrome中它被作为未经授权的弹出窗口击落.有趣的是,有时当我一直点击它时,Chrome已经改变了主意,无论如何都要打开链接(如标签).但情况并非总是如此,有时候这种联系仍然存在.
经过几个小时的实验(并且从onclick
简单变为简单target="_blank"
)后,我发现链接被杀的原因是click事件是从<img>
标签中开始的<a>
.当我更换了<img>
一个<span>
包含一些文本,并点击了<span>
,链接打不开器(Chrome已经确定它为一个不需要的弹出),但是当我点击了<a>
标签本身(即有一个固定大小或填充),然后它被接受了,一个新标签诞生了.
最后我把图像作为CSS背景包含在内,<a>
标签仍然是空的.现在,每个浏览器中的所有内容似乎都在使用此标记:
<a href="URL" target="_blank" style="background:url('NICE_IMAGE'); height:XXX; width:XXX" title="Description"></a>
Run Code Online (Sandbox Code Playgroud)
谷歌Chrome逻辑背后的原因是,当链接包含标签时,禁止将其作为新标签打开,但是当它为空时,它可以继续吗?
我有应用程序有时打开弹出窗口阻止程序,当用户运行应用程序时,chrome在URL框(右侧)中有一些标志,告诉用户弹出窗口被阻止,在这种情况下我给了用户另外还有新的警告信息,如"请注意页面被阻止请启用它......"
我的问题是我何时以及在哪个术语中需要再次检查,假设用户允许新的App页面
- 如果用户关闭并打开浏览器,他是否需要再次启用此弹出窗口?
我知道,如果用户将在不同的Chrome版本(如金丝雀或测试版)中运行它,他可能需要再次确认此页面但我的问题在哪种情况下弹出窗口将再次显示给同一用户(之前已确认)
在允许 App运行弹出窗口阻止程序后会再次阻止它?
顺便说一下,我在公司看到他们通过一些自动化过程为弹出窗口阻止程序添加了例外,它是怎么回事?有一个代码可以做到吗?(奇怪......)
当我点击设置搜索pop - > privacy - > content settings - > manage exception然后我看到时,我看到了
popup-blocker ×10
javascript ×7
popup ×3
jquery ×2
popupwindow ×2
capybara ×1
chromium ×1
firefox ×1
modal-dialog ×1
referer ×1
v8 ×1
webdriver ×1
window ×1
window.open ×1