JavaScript: void(0), IE6, SWFAddress

Привет,

Мы собираемся запустить защищенный сайт (извините, без URL) и обнаружили в IE6 довольно эзотерическую ошибку, которая, я надеюсь, кто-то мог встретить или пролить немного света. Это происходит только при наличии трех факторов:

  1. Браузер IE6 (это финансовый клиент, и это их одобренный браузер)
  2. SWFAddress используется на странице, которая все Flash
  3. void(0) вызывается из закладки браузера со значением, установленным в строку JavaScript

Если вы знакомы с букмарклетом "Читать позже" от Instapaper, который запускает всплывающее окно с кнопкой "Читать позже" для отправки URL-адреса, который вы просматривали, на свой сайт, для входа в систему, это то же самое предположение.

Это работает с любым другим URL в родительском окне, которое я тестировал. Сбой происходит только тогда, когда SWF обновляет историю /URL браузера с помощью SWFAddress, что является обязательным требованием, так как это URL-адрес с глубокими ссылками, который мы пытаемся получить с помощью инструмента букмарклет.

Насколько я понимаю, строка JavaScript должна заканчиваться на void(0), чтобы родительское окно не переходило к строке JavaScript. Это типично для старого приложения JavaScript в атрибуте href.

Мы видим две вещи:

  1. После первого открытия нового окна браузера с кодом JS в закладке SWFAddress больше не обновляет историю браузера / строку URL-адреса.
  2. После отправки и закрытия нового окна браузера, в котором есть форма, последующее открытие окна с помощью закладки игнорирует void(0) и перенаправляет родительское окно.

Вот код закладки:

javascript:var%20d=document;w=window,f='http://mydomain.com/popup?l=',l=d.location,e=encodeURI,p=e(l.href),u=f+p;s=p.split('/');if(s[3]=='p'||s[3]=='t')u=u+'&p='+s[5];w.open(u,'p','toolbar=0,menubar=0,directories=0,personalbar=0,resizable=0,status=1,width=300,height=460');void(0);

Часть Flash управляется другим поставщиком, поэтому я не контролирую и не понимаю их код. Я просто пытаюсь решить эту проблему, чтобы узнать, сталкивался ли кто-либо с такими проблемами с таким набором факторов.

Большое спасибо, Марк

3 ответа

Похоже, что ваш букмарклет имеет несколько синтаксических ошибок и может быть уменьшен немного больше:

javascript:var%20f='http://mydomain.com/popup?l=',l=document.location,e=encodeURI,p=e(l.href),u=f+p,s=p.split('/');if(s[3]=='p'||s[3]=='t')u+='&p='+s[5];open(u,'p','toolbar=0,menubar=0,directories=0,personalbar=0,resizable=0,status=1,width=300,height=460');void(0);

Вы также можете попытаться добавить return false; вместо void(0);

Если вы используете getURL() или navigateToUrl(), вам нужно знать, что это создает конфликт с SWFAddress. Проверьте http://www.asual.com/blog/swfaddress/2007/05/18/swfaddress-bad-practices.html для объяснения.

Здравствуйте, вы можете попробовать это

<a href='#' onclick='document;w=window,f='http://mydomain.com/popup?l=',l=d.location,e=encodeURI,p=e(l.href),u=f+p;s=p.split('/');if(s[3]=='p'||s[3]=='t')u=u+'&p='+s[5];w.open(u,'p','toolbar=0,menubar=0,directories=0,personalbar=0,resizable=0,status=1,width=300,height=460');'>click to visit</a>
Другие вопросы по тегам