对于小型设备,我正在将<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();
});
似乎在Firefox中完成了这项工作,但在Chrome中我得到了阻止的弹出警告(如果用户点击而不是用JS模拟它,则不会想到
任何解决方法吗?
答案 0 :(得分: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);
});
答案 1 :(得分: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();
}
};
}