如果除了打开一个新窗口我尝试做任何事情,Bookmarklet窗口都会被阻止

时间:2013-06-20 17:06:27

标签: javascript ruby-on-rails web bookmarklet

我正在尝试编写一个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>

它会打开一个不受限制的新标签页。我假设不同之处在于我在第一个例子中做了一些解析,浏览器不喜欢这个。

有没有办法让我的蛋糕也吃掉它?非常感谢!

1 个答案:

答案 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。

相关问题