相关疑难解决方法(0)

设置JQuery event.preventDefault()时,在window.open上绕过弹出窗口阻止程序

我想在超链接的单击事件上有条件地显示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事件:)

jquery window.open popup-blocker jquery-callback

96
推荐指数
5
解决办法
17万
查看次数

如何阻止Google Chrome阻止我的弹出窗口?

在我的网站上有一个按钮,用于调用一个调用的函数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)

javascript google-chrome popup popup-blocker

38
推荐指数
3
解决办法
8万
查看次数

window.open弹出窗口在单击事件期间被阻止

我最终需要做的是运行一个$.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)

javascript jquery window

21
推荐指数
2
解决办法
4万
查看次数

更改已打开的弹出窗口的URL

是否可以更改弹出窗口的URL.

假设我打开一个弹出窗口:

function pop1(){
    window.open('http://google.com','wind1');   
}
Run Code Online (Sandbox Code Playgroud)

可以将弹出窗口"wind1"的URL更改为"http://msn.com".与location.href或任何其他解决方案的东西.

javascript popup

19
推荐指数
1
解决办法
3万
查看次数

ajax请求后的Chrome window.open就像popup一样

我有一种情况,当用户按下按钮时,我执行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)

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

一个澄清的说明:我更关心它是在一个单独的窗口而不是一个标签中打开,而不是我被弹出窗口阻止程序阻止.

javascript ajax google-chrome

17
推荐指数
4
解决办法
4万
查看次数

沉默网:: ERR_CONNECTION_REFUSED

连接到不存在的Web套接字服务器会导致大量错误记录到控制台,通常是调整... net::ERR_CONNECTION_REFUSED.

任何人都有想法让hackaround沉默这个输出?XMLHttpRequest如果服务器不可访问,它将产生相同的详细错误输出,因此将无法工作.

这里的目标是测试服务器是否可用,如果它是连接到它,否则使用回退,并执行此操作而不会通过错误输出向控制台发送垃圾邮件.

javascript safari firefox google-chrome websocket

13
推荐指数
1
解决办法
4646
查看次数

PhantomJS/WebKit中奇怪的JavaScript行为

我正在使用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)

javascript webkit google-chrome blink phantomjs

10
推荐指数
1
解决办法
543
查看次数