У меня есть виджет JavaScript (кусок встроенного JS и HTML-кода), встроенный в другие сайты. Что делать, чтобы убедиться, что имена переменных не конфликтуют с переменными страницы хостинга?Как избежать столкновений имен в виджетах JavaScript
Я хотел бы этот виджет будет «встраиваются» означает на той же странице, на странице хостинга, не в IFRAME, что лучший способ избежать конфликтов имен с страницы хостинга или столкновений с другими виджетами?
Имя столкновения может произойти несколькими способами:
- JavaScript имена переменных
- JavaScript имена функций
- идентификаторы DOM элементы имена классов
- CSS
- поболе ...
Я могу придумать несколько способов oid, но мне было интересно, есть ли передовая практика или другие общие рекомендации. Итак, вот мои 2c:
- Просто используйте длинные имена и попробуйте уникальные имена. Это уродливое и не полное доказательство, но простое в концепции.
- Используйте iframe. Но, как уже упоминалось, я не хочу использовать iframe по нескольким причинам. Я хочу, чтобы виджет наследовал атрибуты стиля со страницы (например, шрифт по умолчанию и цвет фона), а самое главное, я не знаю, насколько велика будет виджет. Это зависит от данных в реальном времени и может иметь любой размер.
- Используйте анонимные функции для лучшего обзора, например. (function() {мой код здесь})(). Это решение, хотя и элегантно, по-прежнему не работает для меня b/c, оно разрешает только имя JS, но не DOM ID или имена классов CSS, а во-вторых, я также использую jsonp, для которого мне нужно предоставить функцию обратного вызова имя, которое в конечном итоге должно быть в глобальной области, поэтому оно не может быть вложено в область анонимных функций.
- Создайте механизм пространства имен в JavaScript, который обеспечит уникальность переменных и функции JS. Что-то в окне стиля ['my_app'] [имя_переменной_имя] или окно ['my_app'] имя_функции. Это тоже немного уродливо, но, по крайней мере, я контролирую пространство имен и могу обеспечить гарантированное уникальное пространство имен.