#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, чтобы запустить менеджер профилей