В JavaScript, как я определяю, является ли мой текущий браузер Firefox на компьютере по сравнению со всем остальным?

Я бы использовал общий, который вы могли бы обрабатывать внешним ...

/// <summary>
/// Generic object copy of the same type
/// </summary>
/// <typeparam name="T">The type of object to copy</typeparam>
/// <param name="ObjectSource">The source object to copy</param>
public T CopyObject<T>(T ObjectSource)
{
    T NewObject = System.Activator.CreateInstance<T>();

    foreach (PropertyInfo p in ObjectSource.GetType().GetProperties())
        NewObject.GetType().GetProperty(p.Name).SetValue(NewObject, p.GetValue(ObjectSource, null), null);

    return NewObject;
}
42
задан TIMEX 24 February 2010 в 09:41
поделиться

9 ответов

То, что вам нужно, известно как обнаружение браузера:

if ($.browser.mozilla) { ... 

Однако сканирование браузера не рекомендуется, так как его легко обмануть пользовательский агент, т. Е. Притвориться быть другим браузером!

Лучше всего использовать обнаружение функций либо по-своему, либо через интерфейс jQuery.support : http://api.jquery.com/jQuery.support/

Вот статья о расширении его для вашего собственного использования: http://www.waytoocrowded.com/2009/03/14/jquery-supportminheight/

Изменить:

Нашел это сообщение, которое также помогает: Когда IE8 не IE8, что такое $ .browser.version?

53
ответ дан 26 November 2019 в 23:24
поделиться
typeof InstallTrigger !== 'undefined'

Это просто и работает много позже Quantum, но не уверенное, будет ли это соответствовать требованиям завтрашнего дня хотя: https://developer.mozilla.org/en-US/docs/Web/API/InstallTrigger

1
ответ дан 26 November 2019 в 23:24
поделиться
navigator.sayswho= (function(){
  var N= navigator.appName, ua= navigator.userAgent, tem;
  var M= ua.match(/(opera|chrome|safari|firefox|msie)\/?\s*(\.?\d+(\.\d+)*)/i);
  if(M && (tem= ua.match(/version\/([\.\d]+)/i))!= null) M[2]= tem[1];
  M= M? [M[1], M[2]]: [N, navigator.appVersion,'-?'];
  return M.join(' ');
 })();

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

Я использую его для регистрации ошибок от пользователей и для тестирования кода в нескольких браузерах, где мне известны строки userAgent.

4
ответ дан 26 November 2019 в 23:24
поделиться

Лучше определять нужные вам функции, а не браузер. Например, если вам нужно узнать, поддерживается ли foo (), вы можете проверить это с помощью if (foo) {}

2
ответ дан 26 November 2019 в 23:24
поделиться

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

Я полагаю, что это в основном вектор (в терминах C, массив) struct {char * begin; char * end};

В C++ реализует все функции std:: последовательность. В C необходимо записать (или получить библиотеку) замещающих функций для всех функций strxxx ().

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

Веревка очень хороша для больших последовательностей. Но все, что меньше 8 КБ, быстрее обрабатывать с помощью memmove и memcpy.

-121--1339985-

Большинство ответов здесь правильные (он обрабатывается компилятором, + преобразуется в .append ()...)

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

Я верю, что дело дошло до чего-то вроде:

"a"+"b"+"c"

=

new String().append("a").append("b").append("c")

Но потом происходит какая-то магия. Это означает:

  • Создайте массив последовательности длиной 3
  • скопируйте a в первую позицию.
  • копия b во вторую
  • копию c в третью

Тогда как большинство людей считают, что она создаст «ab», затем выбрасывают ее, когда она создает «abc». Он на самом деле понимает, что он скован и делает некоторые манипуляции.

Есть также хитрость, где, если у вас есть последовательность «abc» и вы запрашиваете подстроку, которая оказывается «bc», они МОГУТ использовать один и тот же базовый массив. Вы заметите, что есть начальная позиция, конечная позиция и «общий» флаг.

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

Теперь я просто запутался. Прочитайте исходный код - это довольно круто.

-121--3791923-

Как уже спрашивалось в комментарии: зачем вам это? Обнюхивание браузера - вредная привычка, и есть лишь несколько ситуаций, когда это необходимо.

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

if (window.XMLHttpRequest)
    var xhr = new XMLHttpRequest();

вместо

if ((brwsr.IE && brwsr.IE.version >= 7) || (brwsr.firefox) || (brwsr.opera))
    var xhr = new XMLHttpRequest();

И также don 't do

if (window.XMLHttpRequest)
    // Hey, native XMLHttpRequest-support, so position: fixed is also supported

(вместо этого проверьте, поддерживается ли позиция: fixed )

Существует несколько необычных браузеров с именами, такими как Kazehakase и Midori , которые также могут поддерживать или не поддерживать эти функции, поэтому ваши скрипты потеряете

Но, пожалуйста, прочитайте упомянутую статью , поскольку она содержит очень хорошее и подробное объяснение этого метода. (Кстати, я думаю, что Zakas ' Professional JavaScript for Web Developers до сих пор слишком неизвестен.)

1
ответ дан 26 November 2019 в 23:24
поделиться

http://api.jquery.com/jQuery.browser/

if ($.browser.mozilla) { ...
1
ответ дан 26 November 2019 в 23:24
поделиться

Вот так: Проверьте Firefox. Или какой-нибудь другой браузер.

 window.onload = function() {
          //  alert(navigator.userAgent);
            if (navigator.userAgent.indexOf("Firefox") > 0) {
                alert("ff");
            }
        }
13
ответ дан 26 November 2019 в 23:24
поделиться

Для этого вы можете использовать navigator.userAgent . Просто посмотрите, содержит ли он Mozilla

-3
ответ дан 26 November 2019 в 23:24
поделиться

Вы можете сделать управление с помощью объекта javascript navigator.userAgent или navigator в целом,

Но если вы хотите использовать что-то готовое, проверьте это:

http://www.quirksmode.org/js/detect.html

надеюсь, это поможет, Синан.

1
ответ дан 26 November 2019 в 23:24
поделиться
Другие вопросы по тегам:

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