Насмешка useragent в JavaScript?

Как объясненный Zach, можно использовать:

xor = bool(a) ^ bool(b)

Лично, я одобряю немного отличающийся диалект:

xor = bool(a) + bool(b) == 1

Этот диалект вдохновлен логическим языком схематического изображения, который я выучил в школе, где "ИЛИ" был обозначен полем, содержащим ≥1 (больше, чем или равный 1), и "XOR" был обозначен полем, содержащим =1.

Это имеет преимущество корректной реализации эксклюзивного или на нескольких операндах.

  • "1 = ^ b ^ c..." означает, что количество истинных операндов нечетно. Этот оператор является "четностью".
  • "1 = + b + c..." означает точно, что один операнд верен. Это "эксклюзивно или", означая "один исключая другие".

63
задан Stefan Kendall 20 August 2009 в 15:34
поделиться

4 ответа

Попробуйте:

navigator.__defineGetter__('userAgent', function(){
    return 'foo' // customized user agent
});

navigator.userAgent; // 'foo'

Пробовали в FF2 и FF3.

105
ответ дан 24 November 2019 в 16:09
поделиться

Нет, я сомневаюсь, что вы можете сделать это с помощью javascript. Но с помощью переключателя пользовательских агентов Firefox вы можете протестировать любой пользовательский агент, какой захотите, так почему бы просто не использовать его?

-2
ответ дан 24 November 2019 в 16:09
поделиться

Обновление:

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

Другая ключевая концепция заключается в том, что информация действительно нереляционная . Так что да, вы можете хранить данные в любом конкретном примере в кучу разных таблиц с большим количеством объединений, но это больно. Но если бы я продолжал приводить вам несколько другие примеры, держу пари, вам придется до бесконечности изменять свой дизайн. Я не думаю, что добавление таблиц и изменение сложных операторов SQL - это очень весело. Так что немного расстраивает то, что за комментарий @ scheibk проголосовали.

Исходное сообщение:

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

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

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

Резюме: вы можете придумать свою собственную схему,

0
ответ дан 24 November 2019 в 16:09
поделиться

Думаю, я бы выбрал метод внедрения зависимостей. Вместо:

function myFunction() {
    var userAgent = navigator.userAgent;
    // do stuff with userAgent
}

Может быть, сделайте что-нибудь вроде:

function myFunction(userAgent) {
    // do stuff with userAgent
}

function getUserAgent() {
    window.userAgentReal = +window.userAgentReal || 0;
    return [ navigator.userAgent ][window.userAgentReal++];
}

function getUserAgentMock() {
    window.nextUserAgentMock = +window.nextUserAgentMock || 0;
    return [
        'test user agent1',
        'test user agent2',
        'test user agent3'
    ][window.nextUserAgentMock++];
}

var userAgent;
while (userAgent = getUserAgent()) {
    myFunction(userAgent);
}

Затем вы можете «смоделировать» getUserAgent () , выполнив:

function getUserAgentReal() { // formerly not 'Real'
    // ...
}

function getUserAgent() { // formerly 'Mock'
    // ...
}

Этот дизайн все еще не полностью автоматизирован (вам нужно вручную переименовать геттер для выполнения вашего тестирования), и он добавляет кучу сложности к чему-то столь же простому, как работа с navigator.userAgent , и я не уверен, как вы на самом деле идентифицируете какие-либо ошибки в myFunction , но я просто решил, что брошу его туда, чтобы дать вам несколько идей, как с этим можно справиться.

Может быть, идея «внедрения зависимостей», представленная здесь, каким-то образом может быть интегрирована с FireUnit.

2
ответ дан 24 November 2019 в 16:09
поделиться
Другие вопросы по тегам:

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