Должен ли я полностью прекратить использование встроенного JavaScript?

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

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

Однако я отмечаю:

Мой вопрос в основном, я ошибаюсь в отношении №3? Возможно ли, что встроенная поддержка JavaScript окажется на пути?


Кстати, я прошу об этом, потому что я думаю, что это может быть "практическая, ответственная проблема, которая уникальна для разработки программного обеспечения". Если другие считают, что это слишком широко или принадлежит где-то еще на SE, я хотел бы услышать ваши предложения. Спасибо заранее!

Ответ 1

Существуют сотни миллионов веб-страниц, которые перестали бы работать, если встроенный javascript был отключен по умолчанию. Браузер, который делает это, должен быть очень смелым.

Обратная совместимость в браузерах - хорошая и плохая вещь (просто подумайте об IE!). Плохо, потому что они могут быть легче и быстрее, если им не нужно поддерживать устаревший код, и хорошо, потому что в противном случае сотни миллионов полезных веб-страниц, которые никто больше не будет поддерживать, будут почти потеряны.

Подумайте, что ни один браузер, даже при использовании HTML5, не будет применять строгие правила для HTML, поэтому я сомневаюсь, что встроенный javascript будет отключен. И даже если будет введен способ сделать это, у вас, как разработчика, будет возможность отключить этот параметр (или даже лучше, а не включить его).

Тем не менее, я бы первым включил его на своих собственных сайтах, потому что я ненавижу встроенный код. Мой совет: никогда не используйте его, если это строго необходимо.

Ответ 2

Как говорится в комментарии, тот, кто сказал, что это неправильно.

Однако вы все равно должны перестать использовать встроенный JavaScript (исключение, фреймворки, такие как Angular), потому что это плохая практика. Озабоченность должна быть разделена. Например:

<someElement onlick="func()">Derp</someElement> // this is bad.
someElement.addEventListener("click",func,false); //this is much better

Легче читать, и в более крупных приложениях это намного проще в обслуживании, особенно в отдельном файле.

Он по-прежнему будет действовать одинаково, да, но, по моему опыту, я столкнулся со многими другими проблемами, отлаживая inline js, чем внешние скрипты.

Ответ 3

Браузеры будут выполнять встроенный JavaScript

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

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

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

Кроме того, иногда полезно иметь возможность проходить через объект JSON, управляемый контентом, из HTML в статический script. Любой браузер, который удалил это, стал бы менее полезным, и люди могли бы уйти.

Проблемы со встроенным JavaScript (почему это на самом деле хорошая идея)

Разрешение встроенного JavaScript делает атаки на межсайтовый скриптинг (XSS) довольно простыми. Злоумышленник вводит некоторый JavaScript в веб-форму, возможно, поле комментариев, а затем сервер отображает script на страницу. script может затем делать такие вещи, как кражи учетных данных для входа или перенаправление на другую страницу, содержащую вредоносную программу.

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

Лучше всего не использовать встроенный JavaScript, если возможно

Вы должны дважды подумать об использовании встроенного JavaScript. Разделение проблем (HTML5 для значения, CSS3 для стилизации, JavaScript для поведения) остается хорошей практикой. Это более аккуратно и проще в обслуживании. Кроме того, разделяя ваш JavaScript в отдельный файл, вы получаете преимущества кэширования. script не нужно загружать каждый раз, когда просматривается страница вашего сайта.

Оптимизация для чистой скорости

Исключением является то, что вы оптимизируете скорость. Размещение вашего script inline в конце вашего файла гарантирует, что ваш контент будет виден как можно скорее. Это метод, который нравится Google. Я не придерживаюсь этого лично, так как это делает ваш код грязным, но он немного улучшит содержимое страницы.