我试图在新选项卡中打开一个URL,而不是弹出窗口.我已经看到相关的问题,其中的回答看起来像:
window.open(url,'_blank');
window.open(url);
但是它们都没有为我工作,浏览器仍然试图打开一个弹出窗口.
我们有一种情况,我们需要在执行XHR/Ajax请求后在浏览器中打开一个新选项卡.
我们通过将Ajax请求设置为同步执行以保持受信任的click事件的上下文来实现此目的,这样可以正常工作.
但是,在最新的Chrome版本(36)中,当Ajax调用有一些延迟时,我们会遇到弹出警告... 2秒的延迟足以让Chrome显示弹出警告,而不是像预期的那样打开标签.代码本身正常工作,我可以多次单击该按钮,它一直有效,直到请求遇到一些延迟.然后我得到弹出警告......
是否存在应用于同步Ajax请求的超时,在此期间需要完成它以使可信事件仍然可用?
有没有办法规避这个?毕竟,呼叫已经同步并冻结其他所有内容,直到结果到来.
谢谢.
更新:我已经创建了一个JSFiddle来演示这个问题:http://jsfiddle.net/23JNw/9/
/**
* This method will give open the popup without a warning.
*/
function performSlowSyncronousRequest() {
    $.ajax({
     url: '/echo/html',
     data: {delay: 2}, //JSfiddle will delay the answer by 2 seconds
     success: function(){
         window.open('http://www.thirtykingdoms.com'); //this causes the popup warning in Chrome
     },
     async: false
    });
}
我想使用JavaScript或jQuery打开一个新选项卡.
我试过这段代码:
window.open("myurl", '_blank');
但浏览器让我警告弹出窗口被阻止.
我必须打开新选项卡而不会弹出阻止警报.
每个客户端都不允许弹出窗口.
有人可以帮我吗?
我正在加载PDF如下(我正在使用Angular 2,但我不确定这是否重要..):
//Inside a service class
downloadPdf = (id): Observable<Blob> => {
    let headers = new Headers();
    headers.append("Accept", "application/pdf");
    return this.AuthHttp.get(this.pdfURL + id, {
        headers: headers,
        responseType: ResponseContentType.Blob
    }).map(res => new Blob([res.blob()], {type: "application/pdf"}));
}
//Inside a click handler
this.pdfService.downloadPdf(this.id).subscribe((data: Blob) => {
        let fileURL = window.URL.createObjectURL(data);
        window.open(fileURL);
    });
这段代码在Firefox中运行良好.在Chrome中,新标签会暂时闪烁并关闭.当我调试并手动将冲浪放到对象URL时,Chrome可以很好地打开它.
我在这做错了什么?
亲切的问候,
Ewout.