我想在超链接的单击事件上有条件地显示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调用之后,浏览器就会阻止弹出窗口,这是在successAJAX调用的回调中打开的.我读过,如果没有用户点击事件调用,浏览器可能会阻止弹出窗口,所以我尝试将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) 我最终需要做的是运行一个$.ajax()调用,然后在运行之后,打开一个新窗口.
用户单击"预览"按钮以保存其当前表单,然后打开一个新窗口,显示包含刚刚保存的数据的项目预览.
但是按原样,该window.open功能被弹出窗口阻止程序阻止.
这是我的代码的基本部分:
HTML:
<a href="/surveys/185/preview" class="preview" target="_blank">Preview</a>
Run Code Online (Sandbox Code Playgroud)
JavaScript的:
$('.preview').live('click', function(event){
save_survey($(this).attr('href'));
event.preventDefault();
});
function save_survey(url) {
$.ajax({
type: "POST",
url: form_url,
dataType: 'json',
data: form_data,
success: function(data) {
window.open(url, '_blank');
}
});
}
Run Code Online (Sandbox Code Playgroud) 是否可以更改弹出窗口的URL.
假设我打开一个弹出窗口:
function pop1(){
window.open('http://google.com','wind1');
}
Run Code Online (Sandbox Code Playgroud)
可以将弹出窗口"wind1"的URL更改为"http://msn.com".与location.href或任何其他解决方案的东西.
我有一种情况,当用户按下按钮时,我执行ajax请求,然后使用ajax请求的结果生成我想在新选项卡中打开的URL.但是,当我在ajax请求的成功处理程序中调用window.open时,在chrome中,它会在弹出窗口的新窗口中打开(并被弹出窗口阻止程序阻止).我的猜测是,由于成功代码与点击处理代码是异步的,因为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');
}
});
});
Run Code Online (Sandbox Code Playgroud)
一个澄清的说明:我更关心它是在一个单独的窗口而不是一个标签中打开,而不是我被弹出窗口阻止程序阻止.
连接到不存在的Web套接字服务器会导致大量错误记录到控制台,通常是调整... net::ERR_CONNECTION_REFUSED.
任何人都有想法让hackaround沉默这个输出?XMLHttpRequest如果服务器不可访问,它将产生相同的详细错误输出,因此将无法工作.
这里的目标是测试服务器是否可用,如果它是连接到它,否则使用回退,并执行此操作而不会通过错误输出向控制台发送垃圾邮件.
我正在使用Python构建一个应用程序,用于检查某个Web应用程序是否容易受到AngularJS Sandbox Escape/Bypass的影响.
下面是它的工作原理.
我的应用程序http://localhost使用以下内容启动本地Web服务器().
<!DOCTYPE html>
<html>
<head>
<script src="https://code.angularjs.org/1.2.19/angular.min.js"></script>
</head>
<body ng-app="">
{{c=toString.constructor;p=c.prototype;p.toString=p.call;["a","open(1)"].sort(c)}}
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我正在使用的Sandbox Escape有效负载{{c=toString.constructor;p=c.prototype;p.toString=p.call;["a","open(1)"].sort(c)}},应该打开一个新窗口open(1).
启动Web服务器后,它使用Selenium(使用PhantomJS作为驱动程序)来检查是否由于AngularJS Sandbox Escape而打开了一个新窗口.
capabilities = dict(DesiredCapabilities.PHANTOMJS)
capabilities["phantomjs.page.settings.XSSAuditingEnabled"] = False
browser = webdriver.PhantomJS(
executable_path="../phantomjs/win-2.1.1",
desired_capabilities=capabilities,
)
browser.get("http://localhost/")
return len(browser.window_handles) >= 2
Run Code Online (Sandbox Code Playgroud)
我面临的问题
PhantomJS无法打开新窗口.当我导航到http://localhost使用谷歌浏览器时,它会打开一个新窗口.
这是PhantomJS控制台日志(包含两个错误):
[
{
"level":"WARNING",
"message":"Error: [$interpolate:interr] http://errors.angularjs.org/1.2.19/$interpolate/interr?p0=%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%7Bc%3DtoString.constructor%3Bp%3Dc.prototype%3Bp.toString%3Dp.call%3B%5B'a'%2C'open(1)'%5D.sort(c)%7D%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20&p1=SyntaxError%3A%20Expected%20token%20')'\n (anonymous function) (https://code.angularjs.org/1.2.19/angular.min.js:92)",
"timestamp":1501431637142
},
{
"level":"WARNING",
"message":"Error: [$interpolate:interr] http://errors.angularjs.org/1.2.19/$interpolate/interr?p0=%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%7Bc%3DtoString.constructor%3Bp%3Dc.prototype%3Bp.toString%3Dp.call%3B%5B'a'%2C'open(1)'%5D.sort(c)%7D%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20&p1=Error%3A%20%5B%24parse%3Aisecfn%5D%20http%3A%2F%2Ferrors.angularjs.org%2F1.2.19%2F%24parse%2Fisecfn%3Fp0%3Dc%253DtoString.constructor%253Bp%253Dc.prototype%253Bp.toString%253Dp.call%253B%255B'a'%252C'open(1)'%255D.sort(c)\n (anonymous function) (https://code.angularjs.org/1.2.19/angular.min.js:92)",
"timestamp":1501431637142
}
]
Run Code Online (Sandbox Code Playgroud)
这是Google Chrome控制台日志(抛出错误但会打开一个新窗口):
Error: [$interpolate:interr] http://errors.angularjs.org/1.2.19/$interpolate/interr?p0=%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%7Bc%3DtoString.constructor%3Bp%3Dc.prototype%3Bp.toString%3Dp.call%3B%5B'a'%2C'open(1)'%5D.sort(c)%7D%7D%20%20%20%20%20%20%20%20%20%20%20%20%0A%0A&p1=Error%3A%20%5B%24parse%3Aisecfn%5D%20http%3A%2F%2Ferrors.angularjs.org%2F1.2.19%2F%24parse%2Fisecfn%3Fp0%3Dc%253DtoString.constructor%253Bp%253Dc.prototype%253Bp.toString%253Dp.call%253B%255B'a'%252C'open(1)'%255D.sort(c)
at …Run Code Online (Sandbox Code Playgroud)