$(this).css(width) не работает с тегами ancohor в Safari

Я использую селекторы CSS для создания настраиваемых всплывающих окон для веб-шаблонов — в основном, некоторым производителям не нравится JS, и мне нужен простой способ для них установить размеры всплывающих окон и т. д. Я не очень интересуются достоинствами этого подхода, но скорее хотят понять, почему jquery, похоже, не может получить ширину и высоту, определенные в CSS, для якоря в Safari.

См.: http://f1shw1ck.com/jquery_sandbox/csspops.html.

Суть моего вопроса:

Для селектора a.popup {width: 800px;height: 560px;} и якоря <a href="http://www.metmuseum.org/toah/hd/apol/hd_apol.htm" class="popup">African Rock Art: Apollo 11 Cave Stone (c. 25,500 - 23,500 BCE)</a> почему

if ($(this).css("width")) {   
windowParams.width = $(this).css("width");
}
if ($(this).css("height")) {   
windowParams.height = $(this).css("height");
}

оба свойства возвращаются как ноль в Safari?

всплывающее оповещение при нажатии в других браузерах: панель инструментов = нет, каталоги = нет, местоположение = нет, изменяемый размер = да, меню = нет, полосы прокрутки = да, статус = нет, ширина = 800 пикселей, высота = 560 пикселей, верх = 20, левый =240

предупреждение в Safari: панель инструментов = нет, каталоги = нет, местоположение = нет, изменяемый размер = да, панель меню = нет, полосы прокрутки = да, статус = нет, ширина = 0 пикселей, высота = 0 пикселей, верх = 20, лево = 640

Спасибо, что помогли мне понять.


person two7s_clash    schedule 03.09.2009    source источник


Ответы (2)


Энди прав. Здесь предлагается решение:

Получите реальную ширину и высоту изображения с помощью JavaScript? (в Safari/Chrome)

person micahwittman    schedule 03.09.2009
comment
Хммм, разве высота и ширина якорей не устанавливаются при загрузке документа? - person two7s_clash; 03.09.2009
comment
Это ключевая концепция: основная проблема заключается в том, что браузеры WebKit (Safari и Chrome) загружают информацию JavaScript и CSS параллельно. Таким образом, JavaScript может выполняться до того, как будут вычислены эффекты стилей CSS, возвращая неверный ответ. - person micahwittman; 03.09.2009
comment
Я добавил if (jQuery.browser.safari && document.readyState != Complete){ //console.info('ready...'); setTimeout(аргументы.вызываемый, 100); возвращение; } что, как я думал, будет означать, что javascript будет выполняться после вычисления CSS. Но я все еще получаю неправильный ответ. - person two7s_clash; 04.09.2009

В Хроме тоже не работает.

Из этой ссылки и это другой ответ на переполнение стека, похоже, причина в том, что браузеры Webkit будет сообщать «0» или «неизвестно» в качестве размера, пока он не будет полностью загружен, что может быть слишком поздно.

Как отмечает Мика, это связано с тем, что Javascript и CSS загружаются параллельно, а это означает, что стили могут быть не полностью применены к моменту запуска скриптов.

person Andy Mikula    schedule 03.09.2009
comment
Извините, какой размер изображения? На моей странице нет изображений... Я имею дело с анкорами... извините, вы говорите, что анкоры загружаются таким же образом, потому что это не имеет для меня никакого смысла. - person two7s_clash; 03.09.2009
comment
Да, извините, я должен был уточнить. Проблема в том, как сказал Мика, что Javascript и CSS загружаются параллельно... изображение, якорь или что-то еще. - person Andy Mikula; 03.09.2009