0

我正在将一些<ul>转换<select>为小型设备,如下所示:

$("#blog aside .widget, #blog-single aside .widget").each(function() {
            var widget = $(this);
            $("<select />").appendTo(widget);
            /* option en blanco*/
            $("<option />", {
                "value"   : '',
                "text"    : widget.find('h3').text()+'..'
            }).appendTo(widget.find('select'));
            widget.find('ul li a').each(function(){
                var el = $(this);
                $("<option />", {
                    "value"   : el.attr("href"),
                    "text"    : el.text()
                }).appendTo(widget.find('select'));
            });
        });

我想在新标签中打开这个链接,这就是我正在尝试的方式:

$("#blog select, #blog-single select").change(function() {
            var url = $(this).find("option:selected").val();
                /* simulamos target _blank, ya que son externos */
                var a = document.createElement('a');
                a.href= url;
                a.className = 'external';
                a.target = '_blank';
                document.body.appendChild(a);               
                a.click();
        });

wich 似乎在 Firefox 中完成了这项工作,但在 chrome 中我收到了被阻止的弹出警告(它不会考虑用户是否点击而不是用 JS 模拟它

有什么解决方法吗?

4

2 回答 2

0

这就是我们最终“解决”它的方式,

检查弹出窗口是否存在,如果不存在,则回退到当前选项卡:

var url = $(this).val();
var win  = window.open(url);
/* Detectar posible bloqueo de popups */
if (win == null || typeof(win) == "undefined" || (win == null && win.outerWidth == 0) || (win != null && win.outerHeight == 0) || win.test == "undefined"){
                    window.location.href = url;
}else if (win){
    win.onload = function(){
    if (win.screenX === 0) {
            win.close();
    }
   };
}
于 2013-08-26T08:21:30.543 回答
0

为避免您可以使用表单来调用屏幕

$("#blog select, #blog-single select").change(function() {
    var url = $(this).find("option:selected").val();
    /* simulamos target _blank, ya que son externos */
    var form = document.createElement('form');
    form.action= url;
    form.method = 'get';
    form.target = '_blank';
    document.body.appendChild(form);               
    form.submit();
    setTimeout(function(){

       document.body.removeChild(form);

    },1000);


 });
于 2013-08-20T13:24:10.017 回答