Окно букмарклета.открыть заблокировано большинством браузеров, у delicious / tumbler нет

#javascript #popup #bookmarklet

#javascript #всплывающее окно #букмарклет

Вопрос:

Привет, ребята — веб-сайту, над которым я работаю, требуется букмарклет, запускаемый с вашей панели инструментов закладок. Я заметил, что некоторые браузеры блокируют мой букмарклет.

Однако аналогичные букмарклеты, такие как Tumblr, Twitter и Delicious, имеют обходные пути, при которых их страницы букмарклетов не блокируются.

Мой текущий скрипт запуска выглядит следующим образом:

 javascript:void(window.open("http://mywebsite.com/share/form?
            u=%22 encodeURIComponent(location.href) %22
            amp;t=%22 encodeURIComponent(document.title),
            %xz%22,"status=0,toolbar=0,location=0,menubar=0,resizable=false,scrollbars=false,height=379,width=379%22));
  

Это простое window.open, которого явно недостаточно для обработки определенных исключений

Сайты, на которых ниже приведен сценарий запуска Delicious, похоже, имеют обходные пути, которые очень похожи на приведенные ниже:

 javascript:(function(){
f='http://www.delicious.com/save
?url=' encodeURIComponent(window.location.href) 
'amp;title=' encodeURIComponent(document.title) 
'amp;notes=' encodeURIComponent('' (window.getSelection?window.getSelection():document.getSelection?document.getSelection():document.selection.createRange().text)) 
'amp;v=6amp;';
a=function(){
    if(!window.open(f
     'noui=1amp;jump=doclose','deliciousuiv6','location=yes,links=no,scrollbars=no,toolbar=no,width=550,height=550'))
    location.href=f 'jump=yes'};
if(/Firefox/.test(navigator.userAgent))
    {setTimeout(a,0)}else{a()}})()
  

Похоже, что они добавляют некоторые дополнительные параметры GET к URL, если пользовательским агентом является firefox.
Я предполагаю, что тогда, если это так, сценарии инициализации при фактической загрузке страницы из букмарклета каким-то образом обрабатывают это исключение?

У кого-нибудь был опыт работы с этой проблемой? Не могли бы вы указать мне на какие-либо ресурсы или подсказки? Я уже некоторое время сталкиваюсь с этим препятствием.

Заранее спасибо

Комментарии:

1. Спасибо — я не видел всех элементов управления на сайте, и, думаю, я начинаю жадничать. Приступаем к этому сейчас.

Ответ №1:

закладка delicious напрямую не вызывает window.open() — она создает функцию (вызываемую a там), которая затем выполняется в setTimeout(a,0) для firefox (я предполагаю, что проблема у вас в firefox).

Вы можете попробовать аналогичный метод и посмотреть, сработает ли он у вас.

Комментарии:

1. У меня возникли проблемы с тестированием, потому что я не мог сбросить настройки, чтобы снова заблокировать его.. Я обратил на это внимание, но не думал, что это что-то изменит. Я думаю, firefox пропускает окно.открыть прямой вызов, внедрив его в функцию, в течение тайм-аута?

2. это единственное реальное различие между этими двумя фрагментами (кроме URL параметров окна, которые ни на что не влияют). Чтобы сбросить настройки, перейдите в командную строку и запустите firefox с аргументом -p. Это позволит вам выбрать другой профиль и, таким образом, иметь чистую среду для тестирования: см. support.mozilla.com/en-US/kb /…

3. больше не запускайте ПК с Windows: P не уверен, как это сделать на Mac

4. запустите firefox-bin с флагом -P, чтобы запустить менеджер профилей