Является ли навязчивый JavaScript когда-либо нормальным?

9

Я думал, что если все пользователи веб-сайта должны включить JavaScript, можно ли использовать навязчивый JavaScript?

Я за прогрессивное улучшение, но какой смысл, когда продвинутое веб-приложение бросает пользователей в дверь, если у них старый браузер или отключен JavaScript?

У нас очень узкая целевая аудитория, и мы можем сказать нашей целевой аудитории, какой браузер и плагины / функциональность им необходимы. Итак, мой вопрос, хорошо ли смешивать JS и HTML в этом случае? Как использовать атрибуты onclick.

Петах
источник
1
«Если все пользователи веб-сайта должны включить JavaScript ... если они имеют ... JavaScript отключен?» <- Это противоречие, и я не уверен, как дать полезный ответ, если он не решен.
HedgeMage
3
Обратите внимание, что в зависимости от вашей целевой аудитории и рынка могут существовать законы о доступности, которые требуют, чтобы ваши сайты были доступны для всех пользователей, включая инвалидов. Что это означает на практике для JS, я не знаю. AFAIK (IINAL), где я нахожусь, у нас есть такие законы, но еще не было тестовых случаев для проработки деталей.
Джеймс
16
Что вы имеете в виду под "навязчивым" JavaScript? Я не знаком с этим термином.
Мак
2
Итак, ваш вопрос в основном таков: хорошо ли писать дерьмовый код? Да, это так, для прототипов и проектов, которые достаточно малы и не требуют обслуживания / обновления после завершения. В противном случае через полгода вы просто будете подталкивать себя, потому что вам понадобится час, чтобы выяснить, что могло бы быть правдоподобным, если бы вы вложили еще несколько секунд, когда его установили.
back2dos
3
Я думал, что этот вопрос собирался задать, было ли все нормально, изменить размер чьего-либо окна браузера или иметь множество всплывающих окон.
whatsisname

Ответы:

17

Это бизнес-решение, а не дизайнерское решение.

Существует плата за предоставление версии веб-сайта, которая работает без JavaScript (или Flash, или Silverlight). Бизнес должен решить , потери в доходах / посетителей , стоит ли это или нет.

Так что, если написание этой версии будет стоить 10 000 долларов (число может быть большим, но оно есть только в этом примере), тогда окупит ли компания эти затраты в течение срока службы сайта? Если нет, то не предоставляйте эту версию.

Однако, если для написания этой версии потребуется всего 100 долларов, то имеет смысл обеспечить постепенное снижение производительности.

Приняв деловое решение нацеливаться только на браузеры с поддержкой JavaScript и ожидать, что у ваших пользователей будет включен JavaScript, тогда имеет смысл сделать так, чтобы ваше приложение использовало те функции, которые вы теперь имеете. Единственное, что вам нужно будет сделать (как это делает само переполнение стека), это вывести предупреждение о том, что сайт не будет работать правильно, если пользователь не включил его.

ChrisF
источник
2
Я думаю, что вы меня неправильно поняли.
Петах
5
Пожалуйста, сообщите нам WTF «навязчивый JS», чтобы избежать недоразумений. Вас уже просили сделать это (проголосовали 7 раз)!
Maaartinus
1
В прошлом я создал несколько изящно деградирующих страниц и обнаружил, что html и javascript намного менее прозрачны, если вы все еще хотите предложить посетителям с поддержкой JS лучший пользовательский интерфейс. Страницы было ОЧЕНЬ сложнее построить, и я думаю, что у парня, который ведет страницу, будет немало трудностей, связанных с вашим кодом. Таким образом, при оценке стоимости создания вашего сайта изящно ухудшающегося, необходимо учитывать затраты на его сопровождение в долгосрочной перспективе. Мне показалось очень заманчивым пойти на компромисс в UX с поддержкой JS
Thomas Stock
1
@maaartinus, навязчивый javascript - это противоположность ненавязчивому javascript en.wikipedia.org/wiki/Unobtrusive_JavaScript
Петах,
1
Хорошо, так что я могу только сказать ... html + js - это чума (сломанные реализации игнорируют странные стандарты), и я бы минимизировал усилия, как писал Томас Сток. Попытайтесь заставить его работать идеально в выбранном браузере (и не выбирайте IE6: D) a и быть терпимым в других. Вместо того чтобы обходить все проблемы, тратьте свое время на функциональность.
Maaartinus
20

Что-то еще никто не поднял до сих пор ...

99% веб-сайтов приветствуют конкретного посетителя, на одном из которых JavaScript практически отсутствует. У этого посетителя есть имя: Googlebot .

Основная причина, что все должны заботиться о слепых посетителях, а также ...

Если вы один из немногих, кому наплевать на трафик с поисковых систем, то это ваша прерогатива, но это, безусловно, не соответствует общему правилу.

Дори
источник
4
Верно. Мы улучшили один из наших сайтов, чтобы сделать его более доступным для слепых и, как следствие (непреднамеренного) следствия, трафик, полученный от Google, увеличился почти в 10 раз за один год.
Крис
1
Да, но сайт не для публики. Поэтому поисковые рейтинги не применяются.
Петах
3
@Petah: Рассматривали ли вы ясно и лаконично, каковы ваши точные требования, ситуации и ограничения в вопросе, вместо того, чтобы высыпать небольшие кусочки информации здесь и там в комментариях?
Просто мое правильное мнение
1
Ты больше не прав. Уже довольно давно Googlebot хорошо работает на javascript (неудивительно, учитывая, что Google работает как на движке V8, так и на angularjs).
Maaartinus
8

Люди, пишущие вещи для определенных внутренних сред, являются большой причиной, почему IE6 все еще существует.

Думаю об этом

Oli
источник
4

Если вы делаете сайт только для JS (возможно, «приложение» в данном случае - более подходящее слово), так называемая «ненавязчивость» JS не имеет такого большого значения, как в случае, когда вам нужно изящно ухудшиться до Версия JS.

Тем не менее: JavaScript, написанный ненавязчивым способом, как правило, легче написать (и, по крайней мере, я так нахожу его) и поддерживать. Проще внести изменения в макет HTML, которые не нарушают JS, и вносить изменения в JS, не беспокоясь о нарушении HTML.

MCHL
источник
4

Если вы создаете веб-сайт, я бы оставил JavaScript ненавязчивым. Однако если вы создаете какую-либо форму приложения (например, Google Docs), JavaScript будет довольно навязчивым.

JavaScript и HTML5 отлично подходят для создания приложений, если это вам нужно, но это действительно бизнес-выбор.

Захари К
источник
Да, это больше похоже на документы Google, чем на веб-сайт. И мы интенсивно используем HTML5.
Петах
Поправьте меня, если я ошибаюсь, но я думаю, что вы все еще можете использовать большинство концепций в ненавязчивом JavaScript без необходимости создавать беспорядок в коде? Это концепция, которая выделяет меня и создает больше шума для меня. Возможно, вы имеете в виду некоторые другие аспекты ненавязчивого JavaScript, которых вам следует избегать при использовании HTML5, например обратную совместимость с пользователями, не поддерживающими JavaScript? Вы должны выбирать, что лучше для вас и проекта, если вы можете разумно обосновать причины и проанализировать риск, тогда я думаю, что это все хорошо :) +1
jmort253
Я говорю о том, как будет функционировать сайт, если Javascript отключен. В некоторых случаях он будет полностью работоспособен (если, возможно, не так хорош), а в других - полностью потерпит неудачу. Я не беспокоюсь о старых браузерах, которые не поддерживают JavaScript (Netscape 1). Конечно, ни в коем случае нет причин писать плохой Javascript
Захария К
2

Большинство пользователей (мои пользователи, я не знаю о ваших пользователях) имеют JavaScript и доступны. Давайте дадим этим пользователям отличный пользовательский опыт. Однако вам все равно нужно предоставить версию своего сайта, которая работает без Javascript. Я знаю, что создавать 2 версии - это хлопотно, но так происходит в веб-разработке. (В действительности вам может потребоваться создать несколько версий, третья версия может быть мобильной версией вашего сайта).

То, что вы не хотите делать, это дизайн для наименее распространенного знаменателя: «Ну, есть некоторые пользователи, у которых отключен Javascript, поэтому мы собираемся разработать наш сайт так, чтобы он работал хорошо для них - нет Javascript, попробуйте сервер для всего «. Это просто наказывает большинство ваших пользователей, которые имеют Javascript.

Марси
источник
Я говорю, что ни у одного из пользователей не отключен JavaScript. Если они это сделают, они не могут получить доступ к сайту.
Петах
@Petah, ну, это тоже не здорово. Вы не хотите отказывать пользователям без Javascript. Так что же вы спрашиваете, так как я выгоняю пользователей без Javascript, могу ли я поместить JS в один файл с моим HTML?
Марси
У нас очень узкая целевая аудитория, и мы можем сказать нашей целевой аудитории, какой браузер и плагины / функциональность им необходимы. Так что вы, мой вопрос, в этом случае хорошо смешиваете JS и HTML. Как использовать атрибуты onclick.
Петах
4
@Petah, есть и другие причины, чтобы не смешивать JS и HTML. По тем же причинам мы избегаем смешивать стили и HTML - разделение интересов. Если ваш стиль смешан с вашей структурой, которая смешана с вашим поведением, вам есть что-то очень сложное для поддержания. Пройдя некоторое время «ненавязчивым» образом, вы увидите, насколько элегантны ваши файлы и насколько проще вносить изменения.
Марси
2
@Petah, у вас есть один огромный JS-файл для всего вашего сайта, и все идет туда? У меня есть примерно один файл JS на страницу, и это хорошо работает для меня. Поистине «общие» вещи - это все, что входит в общий файл JS.
Марси
2

Вы упомянули использование атрибутов onlick. Планируете ли вы использовать обработчик событий JavaScript для навигации по страницам?

Я бы рекомендовал против этого по одной причине: он ломает средний щелчок .

Для обычного нажатия на ссылку, если JavaScript включен, они будут функционально эквивалентны:

<a href="#" onclick="window.location = 'myPage.htm';">Click here</a>
<a href="myPage.htm">Click here</a>

Если вы попробуете средний щелчок по первому примеру, вы получите пустую страницу, а не myPage.htm.

Помимо этого примера, я думаю, что можно использовать навязчивый JavaScript, если это имеет смысл для вас. Написание (но не обязательно поддержание) встроенного JavaScript занимает меньше времени, и потеря прогрессивного улучшения может быть не важна в вашей ситуации.

GavinH
источник
В данном случае это не для навигации, а для кнопок типа «Обновить», «Удалить», «Создать» и т. Д.
Petah
В таком случае, я бы посоветовал, чтобы это был личный стиль. Я считаю, что навязчивый метод быстрее / легче начать, но «правильный» способ быть чище и проще в обслуживании. Есть определенно нечеткий фактор хорошего в правильном пути.
GavinH
+1 - легче поддерживать код в чистоте с самого начала, если он ненавязчивый. Я обнаружил, что если вначале я запутался, может быть слишком сложно попытаться исправить проблемы позже. Я перегружен Я предпочитаю выполнять работу настолько хорошо, насколько могу, чтобы, когда я вернусь, не было так плохо для рефакторинга.
jmort253
2

Навязчивый JavaScript был в порядке 10 лет назад. Это также хорошо, если вы любитель, или вы создаете одноразовый прототип, или если есть некоторые обстоятельства, которые требуют его, такие как зависимость от унаследованного кода или кода, управляемого данными, и это будет стоить просто слишком много, чтобы исправить все

Если вы создаете что-то с нуля, следуйте стандартам, напишите хороший, чистый, поддерживаемый код. Напишите что-нибудь, чем вы будете гордиться, и это не заставит вас заболеть через год, когда какой-нибудь бедняга попросит вас о помощи, потому что не понимает, что вы сделали. Напишите что-нибудь, что гарантирует, что ваши веб-дизайнеры смогут легко менять CSS без необходимости копаться в грязном HTML и JavaScript.

Создайте приложение так, чтобы у него было пространство для роста, чтобы любой разработчик мог войти и поддерживать его. Время, потраченное сейчас, сэкономит время в будущем, если не ваше, чужое.

Убедитесь, что JavaScript может быть повторно использован в другом контексте. Удостоверьтесь, что полная модернизация веб-сайта может быть только изменением, а не полной перестройкой того, что уже существует, но просто не было построено жестко.

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

Поверьте мне, исходя из опыта, ненавязчивый JavaScript не позволит вам совершить дорогостоящие ошибки.

jmort253
источник
2

Хорошо, просто назови меня хранителем склепа на всех некро, которые я делаю, но я никогда не чувствовал, что истинная ценность этого была правильно понята. Исторически сложилось так, что «ненавязчивый JavaScript» или сохранение вашего JS вне HTML с помощью встроенных атрибутов обработчика событий HTML и тегов сценариев, которые не связываются с файлом в максимально возможной степени, является огромным ключевым элементом:

  • Проблемы доступности
  • SEO
  • И прогрессивное улучшение

ВРАНЬЕ! (ну, теперь они будут)

Дело в том, что вы могли бы сделать технически навязчивый JavaScript и все же выполнить три вышеуказанных пункта. Если вы не создавали HTML-контент динамически, что было большим SEO нет-нет в день.

Но остановись и подумай ... о себе!

Действительно, большая выгода, главная и самая недооцененная победа в поддержании разделения всегда была прямой выгодой, которую разработчик получает от этого. В одном и том же элементе html для одного и того же события вы можете иметь столько обработчиков событий, сколько вам удобно. Это означает, что если тег class="some_class"всегда имеет определенное поведение, но также получает некоторое бонусное поведение, когда он находится внутри id="bonus_behavior"элемента div, нам не нужно начинать возиться с логикой в ​​нашем обработчике событий с одним разрешением, чтобы перейти к нему. Мы можем просто добавлять или не добавлять обработчики в зависимости от контекста.

Легко читать

Еще одно преимущество - удобочитаемость. Это было более серьезной проблемой, когда инструменты браузера состояли из эксклюзивного сообщения об ошибке IE, сообщающего вам, что с ним что-то не так, [object]но с IMO это все еще имеет большое значение. CSS здесь, JS там и HTML это место, где встречаются и они, и сервер. Поскольку все эти вещи объединяются в одном месте, имеет смысл полагаться на хуки (идентификаторы, классы и иерархию) для создания уровня абстракции, который все использует для подключения к HTML.

ИМО, чем больше вы МОЖЕТЕ держать свои HTML, CSS и JS разделенными, тем легче будет не только читать, но и изменять и понимать, что происходит. Я вижу пустой div с «dynamic_combo_box» как класс, и у меня есть хорошая идея, что что-то делает необычный выбор, который загружает данные динамически. У меня есть подсказка, как найти это в JS и CSS, и если я столкнусь с классом по этим вопросам, у меня будет хорошее представление о том, что это такое и как найти его в HTML.

Слишком легко сделать даже неряшливый

И, конечно, разборчивость имеет тенденцию идти рука об руку с ремонтопригодностью. Когда вы просто делаете что-то напрямую, выкидывая все это в теги сценария, где находится соответствующий HTML, зачастую людям становится проще просто вырезать и вставить этот сценарий в HTML другой страницы, над которой они работают, когда им нужна похожая функциональность, а это означает, что теперь у вас есть одна вещь, которая, скорее всего, в конечном итоге станет двумя раздражающе похожими, но не на 100% похожими вещами, поведение которых со временем может стать проблематичным из-за игнорирования ожиданий и требует добавления более бессмысленных ветвлений для обработки исключений, которые необходимы другой не сделал.

Так что фальсификация поведения для этих хуков HTML поощряет повторное использование кода разумным способом. Если вам нужно разветвлять поведение для альтернативной реализации, вы просто переходите к той же функции и обрабатываете ее там с помощью иерархии HTML или, возможно, с помощью data-att, запускающего некоторое alt-поведение. Это одна остановка покупок для любого, кто хочет понять, как работают элементы пользовательского интерфейса определенного типа, и эти ужасно ленивые в стиле вырезки и вставки будут делать правильные / более удобные для обслуживания вещи только потому, что это самая простая вещь сделайте это сейчас, и это лучший способ обеспечить ремонтопригодность. Сделайте это самым легким делом даже для тех, кому все равно, из-за паники или апатии.

Но как насчет 2014?

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

Это хорошо, как разделение БД или уровня данных - это хорошо. В конечном итоге это экономит время, почему я просто не делаю, например, что вы потратили все пять минут на стирку прошлой ночью, вместо того, чтобы тратить 10 минут на жевание ваших боксеров и проводить проверку параноидального запаха на следующее утро.

Для меня это именно те корыстные мотивы, которые всегда были главной причиной того, почему я держусь не просто за ненавязчивый JS, а за то, чтобы разделить интересы стиля / поведения / контента настолько, насколько это возможно, даже если WHAT-freaking-WG делает все возможное, чтобы запутать эти проблемы по понятным удивительным и прохладным / удобным способом.

Теперь, когда все делают SPA, и это почти глупо, чтобы убедить бизнес, что мы должны заботиться о людях, которые работают без JS (доступность теперь может быть, предположительно, обработана сгенерированным JS контентом), кажется, что следующее поколение разработчиков JS меньше заботится об этом, но IMO, там все еще есть победа, и это в основном для вас, разработчика, пишущего и поддерживающего этот материал. И действительно, эта победа всегда должна была быть наиболее подчеркнутой, но никогда не была по какой-то причине, потому что она в конечном итоге приносит пользу вам и продукту благодаря счастливой случайности благодаря простоте настройки / модификации / отладки.

Это всегда хорошо?

Ну да, наверное. В одноразовом одноразовом приложении для конкурса или чего-то еще. Но я все равно буду делать это только потому, что у меня есть привычка, и на самом деле это не сложнее.

Эрик Реппен
источник
1

Если вы знаете свою целевую операционную среду, Javascript и такие фреймворки, как jQuery, могут стать настоящей находкой. Например, в корпоративной среде, где у SOE есть Javascript и IE8, что более чем безопасно для написания интенсивных клиентских браузерных приложений.

Джереми
источник
1

Упрощение постепенной деградации - это только один из многих факторов, которые делают ненавязчивый JavaScript привлекательным выбором, и, на мой взгляд, он не самый важный.

Исходя из личного опыта, я бы сказал, что если вы говорите о более крупном проекте, который, скорее всего, со временем будет сильно развиваться, то использование ненавязчивого стиля сделает приложение БОЛЬШИМ в обслуживании, отладке и рефакторинге. Это главная причина, по которой мы всегда используем ненавязчивый стиль, даже на сайтах, которые требуют, чтобы JavaScript был включен для всех посетителей.

шан
источник
+1 к Шану за этот драгоценный камень «Упростить изящную деградацию - это только один из многих факторов, которые делают ненавязчивый JavaScript привлекательным выбором, и, на мой взгляд, он не самый важный». Временами реализация Javascript может быть обоюдоострым мечом, я нашел это лично
MattyD
1

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

Ограниченный доступ, обычно не индексируемый и не основанный на доходах «сайт» (веб-приложение), может быть намного более гибким. Это сводится к выбору между широтой поддержки, глубиной возможностей и стоимостью разработки. Думайте об этом как о разработке традиционного приложения: какую платформу вы поддерживаете и каковы минимальные спецификации? Если вы ориентируетесь только на одну платформу и ограниченные спецификации, вы можете сконцентрироваться на предоставлении превосходного продукта с меньшими затратами на разработку и поддержку за счет потери потенциальной доли рынка.

Пример: Google Search - это веб-сайт. Google Docs - это веб-приложение. Поиск в Google без излишеств и может функционировать одинаково без JavaScript, CSS и / или изображений и т. Д. - он работает в браузерах с текстовым режимом так же, как и в последних браузерах с графическим интерфейсом. Документы Google просто не работают с отключенным JavaScript и даже не изящно деградируют - даже не предупреждение о включении JavaScript.

Кертис Батт
источник
1

Я предпочитаю, чтобы большинство макетов и навигации обрабатывались в CSS. Да, Lynx может не поддерживать его, но все известные мне полнофункциональные браузеры не могут его отключить. Тогда JavaScript можно использовать для более ярких, но не обязательных вещей. Мне также нравится Ruby on Rails для этой цели. Он может сделать многое из того, что потребуется JavaScript для выполнения на стороне сервера, если вам не нужно динамическое обновление страницы.

Больше нацелен на ответ на вопрос: мне не нравится JavaScript, но есть бизнес-пример, где он требуется, как отметил ChrisF.

RobotHumans
источник
0

Javascript является стандартом дефектов, когда речь заходит о любом виде динамического контента, предоставляемого клиентской стороной, если у них нет JS, то у них, вероятно, не будет Silverlight.

Тогда вы должны подумать о своем рынке / аудитории. Вы программисты.stackexchcange или bbc.co.uk/news? очень разные аудитории.

henry.oswald
источник
0

Поскольку вы можете просматривать веб-страницы и видеть «навязчивый javascript» на многих сайтах, ваш основной вопрос получен, да, все в порядке, и многие популярные сайты делают это, даже Google.

Однако более важным является постепенное ухудшение функциональности, даже если вы настаиваете на том, чтобы у ваших пользователей был включен Javascript, вы должны обеспечить достойный уровень опыта для пользователей, не являющихся js, или они никогда не вернутся по собственному желанию.

ocodo
источник
Они никогда не пропустят первую страницу.
Петах