JavaScript: void(0), IE6, SWFAddress
Привет,
Мы собираемся запустить защищенный сайт (извините, без URL) и обнаружили в IE6 довольно эзотерическую ошибку, которая, я надеюсь, кто-то мог встретить или пролить немного света. Это происходит только при наличии трех факторов:
- Браузер IE6 (это финансовый клиент, и это их одобренный браузер)
- SWFAddress используется на странице, которая все Flash
void(0)
вызывается из закладки браузера со значением, установленным в строку JavaScript
Если вы знакомы с букмарклетом "Читать позже" от Instapaper, который запускает всплывающее окно с кнопкой "Читать позже" для отправки URL-адреса, который вы просматривали, на свой сайт, для входа в систему, это то же самое предположение.
Это работает с любым другим URL в родительском окне, которое я тестировал. Сбой происходит только тогда, когда SWF обновляет историю /URL браузера с помощью SWFAddress, что является обязательным требованием, так как это URL-адрес с глубокими ссылками, который мы пытаемся получить с помощью инструмента букмарклет.
Насколько я понимаю, строка JavaScript должна заканчиваться на void(0), чтобы родительское окно не переходило к строке JavaScript. Это типично для старого приложения JavaScript в атрибуте href.
Мы видим две вещи:
- После первого открытия нового окна браузера с кодом JS в закладке SWFAddress больше не обновляет историю браузера / строку URL-адреса.
- После отправки и закрытия нового окна браузера, в котором есть форма, последующее открытие окна с помощью закладки игнорирует 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>