JS - Обнаружение переменных в файлах [дубликат]

Примером этого исключаемого исключения является: Когда вы пытаетесь проверить что-то, это null.

Например:

string testString = null; //Because it doesn't have a value (i.e. it's null; "Length" cannot do what it needs to do)

if (testString.Length == 0) // Throws a nullreferenceexception
{
    //Do something
} 

Время выполнения .NET исключение NullReferenceException при попытке выполнить действие над чем-то, что не было инстанцировано, т.е. код выше.

По сравнению с ArgumentNullException, которое обычно выбрано как защитная мера, если метод ожидает, что то, что происходит

Дополнительная информация находится в C # NullReferenceException и Null Parameter .

130
задан Gumbo 3 April 2011 в 12:27
поделиться

11 ответов

Чтобы подтвердить загрузку cdn-скрипта, вы можете проверить наличие какой-либо переменной / функции, которую этот скрипт определяет, если он не определен - тогда cdn не удалось, и вам нужно загрузить копию локального скрипта.

В этом принципе такие как:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script>
<script>window.jQuery || document.write('<script src="js/libs/jquery-1.5.1.min.js">\x3C/script>')</script>

(если нет свойства window.jQuery, указанный скрипт cdn не загружен).

Вы можете создавать свои собственные решения с помощью этого метода. Например, плагин jQuery tooltip создает функцию $.tooltip(), поэтому мы можем проверить ее с помощью кода следующим образом:

<script>
    if (typeof $.tooltip === 'undefined') {
        document.write('<script src="js/libs/jquery.tooltip.min.js">\x3C/script>');
    }
</script>
215
ответ дан Joseph Silber 25 August 2018 в 15:32
поделиться

Я ответил на аналогичные вопросы в jquery ui - как использовать google CDN

Вы можете сделать вызов, используя

<link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.9/themes/base/jquery-ui.css" type="text/css" media="all" /> 
<script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.5.min.js" type="text/javascript"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.9/jquery-ui.min.js" type="text/javascript"></script>

Вы также можете ссылку на другие темы Ui, изменив название темы. В этом случае измените базу имен на любое другое название темы /base/jquery-ui.css на любую другую тему.

<link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.9/themes/base/jquery-ui.css" type="text/css" media="all" />

Проверьте блог jQuery UI для ссылки всех ссылок CDN http://blog.jqueryui.com/

Если вы хотите чтобы вернуться на ваш компьютер в случае неудачи Google, вы можете сделать

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script>
<script type="text/javascript">
if (typeof jQuery == 'undefined')
{
    document.write(unescape("%3Cscript src='/jquery.js' type='text/javascript'%3E%3C/script%3E"));
}
</script>
1
ответ дан Community 25 August 2018 в 15:32
поделиться

Я бы посмотрел на плагин, такой как yepnopejs

yepnope([{
  load: 'http:/­/ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js',
  complete: function () {
    if (!window.jQuery) {
      yepnope('local/jquery.min.js');
    }
  }
}]);

Получает массив объекта для проверки, проверяет документацию на сайте

16
ответ дан Eivind 25 August 2018 в 15:32
поделиться
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.js"></script>
<script>!window.jQuery && document.write(unescape('%3Cscript src="js/libs/jquery-1.4.2.js"%3E%3C/script%3E'))</script>

Взято из HTML5 Бойлер .

6
ответ дан EMMERICH 25 August 2018 в 15:32
поделиться

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

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.js"></script>
<script>window.jQuery || document.write('<script src="js/jquery.min.js">\x3C/script>'</script>

Итак, это попытка загрузить jQuery (1.5.1) из CDN Google. Поскольку метки <script> блокируют общий рендеринг & amp; (если явно не указано иное), мы можем проверить сразу после этого, если объект jQuery находится внутри window. Если нет, просто отбросьте, записав в документ еще один тег <script>, ссылаясь на локальную копию.

2
ответ дан jAndy 25 August 2018 в 15:32
поделиться

Я не думаю, что любое решение может быть безболезненным, если соответствующий CDN действительно отфильтрован. (например, iptables / drop, неправильно сконфигурированные маршрутизаторы.) Если вы не доверяете им, используйте все локально ... И вы избавляетесь от нескольких неожиданностей / звонков от пользователей в экзотической сети.

0
ответ дан Lajos Veres 25 August 2018 в 15:32
поделиться

Следующее решение проходит проверку как для HTML5, XHTML 1.0 Transitional, так и для других HTML-вкусов. После каждого внешнего вызова JQuery поместите следующее. Обязательно замените jquery.min.js на путь к вашей локальной копии сценария JQuery.

<script type="application/javascript">window.jQuery || 
document.write(unescape('%3Cscript src="jquery.min.js"%3E%3C/script%3E'))</script>

Если вы не используете unescape, у вас будут ошибки при проверке с помощью http://validator.w3.org , так как «%» не разрешено в списке спецификаций атрибутов.

Пример HTML-Boilerplate также имеет ошибки проверки при использовании со старым HTML:

  1. обязательный атрибут «тип» не указан
  2. символ «& amp;» является первым символом разделителя, но имеет место как данные

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

Вам нужно указать другую функцию для каждого скрипта, размещенного на стороне. Например, плагин JQuery Tooltip создает функцию $ .tooltip (), поэтому вы можете проверить его со следующим:

<script type="application/javascript">typeof ($.tooltip()) !== 'undefined' || 
document.write(unescape('%3Cscript src="jquery.tooltip.min.js"%3E%3C/script%3E'))</script>
2
ответ дан Loren 25 August 2018 в 15:32
поделиться

Я использую http://fallback.io/

  fallback.load({
        // Include your stylesheets, this can be an array of stylesheets or a string!
        page_css: 'index.css',

        // JavaScript library. THE KEY MUST BE THE LIBARIES WINDOW VARIABLE!
        JSON: '//cdnjs.cloudflare.com/ajax/libs/json2/20121008/json2.min.js',

        // Here goes a failover example. The first will fail, therefore Fallback JS will load the second!
        jQuery: [
            '//ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.FAIL_ON_PURPOSE.min.js',
            '//ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js',
            '//cdnjs.cloudflare.com/ajax/libs/jquery/1.9.0/jquery.min.js'
        ],   .......
4
ответ дан Maxim 25 August 2018 в 15:32
поделиться

Лучше всего выполнять загрузку этого сценария с помощью собственного кода Javascript.

Сначала попробуйте загрузить файл CDN, вставив новый элемент SCRIPT в DOM. Затем проверьте, что он загружен, ища объект, который он определяет. Если объект не отображается, вставьте другой элемент SCRIPT для загрузки локальной копии. Вероятно, лучше всего очистить DOM и удалить SCRIPT, которые также не смогли загрузить.

Не забывайте учитывать проблемы с синхронизацией, т. Е. Загрузка не мгновенная.

0
ответ дан Michael Dillon 25 August 2018 в 15:32
поделиться
<script src="http://ajax.aspnetcdn.com/ajax/mvc/3.0/jquery.validate.unobtrusive.min.js" type="text/javascript"></script>
<script src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.7/jquery.validate.min.js" type="text/javascript"></script>   
<script type="text/javascript">
if(typeof jQval == 'undefined')
{
    document.write(unescape("%3Cscript src='/Scripts/jquery.validate.unobtrusive.min.js' type='text/javascript'%3E%3C/script%3E"));
    document.write(unescape("%3Cscript src='/Scripts/jquery.validate.min.js' type='text/javascript'%3E%3C/script%3E"));
}
</script>

Взято из в этой статье

0
ответ дан Swaff 25 August 2018 в 15:32
поделиться

первая вещь - не следует ли включать их в другом порядке?

что-то вроде этого должно работать:

<script src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.7/jquery.validate.min.js"></script>
<script src="http://ajax.aspnetcdn.com/ajax/mvc/3.0/jquery.validate.unobtrusive.min.js"></script>
<script>jQuery.fn.validate || document.write('<script src="js/jquery.validate.min.js">\x3C/script><script src="js/jquery.validate.unobtrusive.min.js">\x3C/script>'</script>

то, что я здесь делаю, просто проверяет, был загружен первый плагин (проверка jQ). путем проверки статической функции validate объекта jQuery.fn. Я не могу проверить второй скрипт таким же образом, потому что он ничего не добавляет, просто проксирует существующие методы, поэтому легче предположить, что если первый работает, второй тоже будет работать - в конце концов, они предоставляются тот же CDN.

3
ответ дан wildcard 25 August 2018 в 15:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: