我正在尝试编写一个bookmarklet,它接受用户所在的站点,进行一些解析和ajax请求,并打开一个新窗口,将该信息作为参数。
这就是我所拥有的:
<a href="javascript:
(function($)
{
var a, http, options, request, st, u;
u = document.location.hostname;
a = u.split('.');
st = a[a.length - 2];
path = 'http://ajax.googleapis.com/ajax/services/feed/find?callback=?&v=1.0&q=' + st;
$.ajax
({
type: 'GET',
url: path,
async: false,
dataType: 'json',
success: function(data)
{
var targ = data['responseData']['entries'][0]['url'];
window.open ('http://localhost:3000/bmfeed?targ='+targ,'menubar=1,resizable=1,width=350,height=250');
}
});
})(jQuery)
"> newwindow </a>
找到正确的网址,但新窗口被弹出窗口拦截器阻止。
如果我只是
<a href='javascript: window.open ("http://localhost:3000?targ=asdfasdf","mywindow","menubar=1,resizable=1,width=350,height=250");'> oneline </a>
它会打开一个不受限制的新标签页。我假设不同之处在于我在第一个例子中做了一些解析,浏览器不喜欢这个。
有没有办法让我的蛋糕也吃掉它?非常感谢!
答案 0 :(得分:0)
我认为不同之处在于我在第一个例子中做了一些解析
不,问题是异步AJAX。浏览器在决定是否阻止之前尝试确定用户操作是否启动了新窗口。要使新窗口无阻塞地打开,用户单击和窗口打开之间必须存在“直接作用线”。异步AJAX打破了这条直线。 (同步AJAX可能会起作用,我不确定。)
有没有办法让我的蛋糕吃掉呢?
没有完美的解决方案,但是对现有内容的改进是在页面上创建一个带有类似<a href="http://localhost:3000/bmfeed?targ=..." target="_blank">click here to open the new window</a>
的链接的pop-over div。