Инструмент, который обнаруживает дубликаты имен функций JavaScript на веб-странице? - PullRequest
8 голосов
/ 17 ноября 2008

Фон

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

Вопрос

Кто-нибудь может порекомендовать инструмент, который предупредит нас, когда мы случайно напишем веб-страницу с двумя функциями javascript с одинаковым именем?

Пример

HTML-страница

<script language="JavaScript" src="test.js" type="text/javascript"></script>
<script>function foo() {alert('bar');}</script>

test.js

function foo() {alert('foo');}

Поскольку foo () объявляется на странице дважды, очевидно, загружается только тот, который имеет приоритет.

Инструменты, которые я использовал, похоже, игнорируют это. Firebug показывает только загруженную функцию. Netbeans покажет обе функции в навигаторе (без предупреждения), но одновременно просматривает только один файл (т. Е. Я не могу указать ему файл HTML и одновременно увидеть его и файл .js) и веб Разработчик расширений позволяет мне смотреть на все сразу, но без ошибок и предупреждений. Консоль ошибок Firefox также не выдает предупреждение или ошибку. Как и IE.

Спасибо!

Ответы [ 4 ]

5 голосов
/ 17 ноября 2008

Я часто использовал JSLINT

Короче говоря, это «компилятор» для JavaScript с использованием JavaScript. Я многому научился, просматривая обучающие видео Дугласа Крокфорда.

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

4 голосов
/ 17 ноября 2008

Что ж, использование парсера не всегда может быть идеальным, поскольку требует дополнительного шага копирования и вставки вашего кода и всех остальных в парсер, и даже тогда я не уверен, что он поймает то, что вы хотите. Проверенное временем решение для совместной разработки Javascript - это пространство имен вашего кода.

var myNamespace = function (){
   var myPrivateProperty;
   var myPrivateFunction = function(){};
   return{

      myPublicProperty: '',
      myPublicFunction: function(){}


   }

 }();

Это основано на шаблоне модуля Дугласа Крокфорда .

Тогда вы можете вызывать ваши публичные функции следующим образом:

 myNamespace.myPublicFunction();

А ваши публичные свойства:

 myNamespace.myPublicProperty;

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

1 голос
/ 20 мая 2009

ScriptManager.RegisterClientScriptInclude (Me, Page.GetType, "jsTest", "test.js")

1 голос
/ 17 ноября 2008

Моим решением будет простой анализатор HTML для Java (я только что взломал один с помощью регулярных выражений; вы можете попробовать http://java -source.net / open-source / html-parsers / jtidy ) и библиотека Apache Rhino (http://www.mozilla.org/rhino/doc.html).

Должна быть возможность перегрузить анализатор в Rhino, чтобы выдать ошибку, если функция переопределена.

Я использую слегка измененную версию env.js (http://jqueryjs.googlecode.com/svn/trunk/jquery/build/runtest/env.js) от John Resig для эмуляции браузера. Это позволяет мне тестировать JavaScript в тестах JUnit. Я могу заполнять формы, отправлять их, проверять макет страниц и т. д.

Подробности смотрите в моем блоге: http://blog.pdark.de/2008/11/18/testing-the-impossible-javascript-in-a-web-page/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...