2013-06-20 2 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> 

Он находит правильный URL, но новое окно блокируется блокировщик всплывающих окон.

Если вместо этого я просто

<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. Браузер пытается определить, инициировало ли действие пользователя новое окно или нет, прежде чем принять решение заблокировать его или нет. Чтобы новое окно открывалось без блокировки, между щелчком пользователя и открытием окна должна быть «прямая линия действия». Async AJAX нарушает эту прямую линию. (Синхронный AJAX может работать, я не уверен.)

Есть ли способ получить мой торт и съесть его тоже?

Там не идеальное решение, но улучшение над тем, что у вас есть сейчас, чтобы создать поп-над DIV на странице со ссылкой аналогичной <a href="http://localhost:3000/bmfeed?targ=..." target="_blank">click here to open the new window</a>.