2013-06-20 24 views
0

我正在尝试编写一个书签,它接受用户所在的站点,执行一些解析和ajax请求,并打开一个新窗口info作为参数。如果我试图做任何事情,除了打开一个新窗口,书签窗口会被阻止

下面是我得到了什么:

<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> 

它会打开一个新标签不羁。我认为不同的是,我在第一个例子中进行了一些解析,这是浏览器不喜欢的。

有没有办法让我的蛋糕吃呢?谢谢一堆!

+1

window.open必须通过点击一个按钮或链接来调用,小书签就像JS一样神奇地发生。你可以附加一个链接到文档来调用最后一行onclick,使用iframe,或设置location.href而不是使用弹出。 – dandavis

回答

0

我认为不同的是,我做了一些分析在第一个例子

没有,问题是异步AJAX。浏览器在决定是否阻止之前试图确定用户动作是否启动了新窗口。为了让新窗口无阻挡地打开,用户点击和窗口之间必须有一个“直接行动”。异步AJAX打破了直线。 (同步AJAX可能工作,我不确定。)

有没有办法让我的蛋糕吃呢?

没有完美的解决方案,但在你有什么改进,现在是建立在页面上弹出了DIV类似于<a href="http://localhost:3000/bmfeed?targ=..." target="_blank">click here to open the new window</a>的链接。

相关问题