Имитировать User-Agent в браузере с JS [duplicate]

Как будто вы пытаетесь получить доступ к объекту, который является null. Рассмотрим ниже пример:

TypeA objA;

. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException, что имеет смысл.

См. Также этот пример:

String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
207
задан Andrey Chaschev 1 February 2014 в 14:21
поделиться

6 ответов

Вот что я приготовил. Это довольно просто, но он работает:

function eventFire(el, etype){
  if (el.fireEvent) {
    el.fireEvent('on' + etype);
  } else {
    var evObj = document.createEvent('Events');
    evObj.initEvent(etype, true, false);
    el.dispatchEvent(evObj);
  }
}

Использование:

eventFire(document.getElementById('mytest1'), 'click');
317
ответ дан Or B 19 August 2018 в 13:03
поделиться

Вы можете сэкономить кучу пространства, используя jQuery. Вам нужно использовать только:

$('#myElement').trigger("click")
12
ответ дан Adam Salma 19 August 2018 в 13:03
поделиться
  • 1
    ОП попросил JavaScript. Хотя это компактно и функционально, некоторые люди предпочитают JS-библиотеку no-Library над такими вещами, как jQuery. – PrOdIgY CaRcAsS 30 July 2016 в 22:04
  • 2
    Сохранить пространство, загрузив jquery? – M H 26 August 2016 в 19:02
  • 3
    Некоторые люди предпочитают сборку. – Dan Nissenbaum 3 September 2016 в 11:31

Считаете ли вы использование jQuery, чтобы избежать обнаружения браузера? С jQuery это было бы так же просто, как:

$("#mytest1").click();
62
ответ дан BradBrening 19 August 2018 в 13:03
поделиться
  • 1
    Это только обработчики событий jQuery для огня, а не поведение по умолчанию (браузер переходит в href в этом случае) – Romuald Brunet 22 August 2012 в 14:26
  • 2
    Почему всегда предполагается, что jQuery / должен использоваться? Это просто грустно ... – Erik Aigner 13 May 2013 в 19:35
  • 3
    Я не знаю о грустном, но мне может быть удобно не переписывать одни и те же процедуры обнаружения браузера снова и снова. – BradBrening 13 May 2013 в 21:43
  • 4
    @ErikAigner: Мне было интересно то же самое, но рад, что принятый ответ в этом случае - это простой JavaScript, а не jQuery. Видно, что слишком много раз на SO. Еще раз: jQuery - это JavaScript, но JavaScript не является jQuery. Хотя мне нравится использовать jQuery, я вижу все больше и больше, что разработчики не понимают реальной вещи. Мои 2 цента не выдерживали комментариев. ;) – Sander 5 August 2013 в 14:22
  • 5
    Есть также много людей, которые не знали бы, с чего начать, если они должны были мыть свою одежду вручную, поскольку большинство домохозяйств владеют стиральной машиной, и почти столько же есть сушилка для одежды. jQuery, так же как и современные приборы, сделали старую работу намного проще и меньше подвержены ошибкам. Тем не менее, это не решение для всех, давая ответ, который точно отвечает на вопрос, используя более сжатый, понятный синтаксис, в то время как кросс-браузерная совместимость кажется обратным. +1. – FreeAsInBeer 16 December 2013 в 22:10

Как насчет чего-то простого:

document.getElementById('elementID').click();

Поддерживается даже IE.

234
ответ дан mb21 19 August 2018 в 13:03
поделиться
  • 1
    просто, и это работает. Мне это нравится. – nont 10 December 2014 в 23:02
  • 2
    но какая версия IE? & quot; работает в IE & quot; как говорят «работает в Windows», ... – gondo 6 April 2015 в 12:15
  • 3
    Вопрос был «работает ли он так же, как и?». - ответ да - AFAIK по крайней мере до 8, не проверял 7 – Darren Sweeney 6 April 2015 в 16:06
  • 4
    Разве это не было раньше? Почему ответы 2010 года не упоминают это простое решение? Просто любопытно... – Parth 22 February 2016 в 17:32
  • 5
    – Nino Å kopac 24 April 2016 в 13:47
  • 6
  • 7
    ДА ПРИНИМАЙТЕ ЭТО ПОЖАЛУЙСТА !!! Удивительно, как многие люди полагаются на jQuery, когда javascript без чего-то настолько велика, я понимаю несколько лет назад, но ... нет оправдания. – Iharob Al Asimi 8 February 2017 в 20:09
var elem = document.getElementById('mytest1');

// Simulate clicking on the specified element.
triggerEvent( elem, 'click' );

/**
 * Trigger the specified event on the specified element.
 * @param  {Object} elem  the target element.
 * @param  {String} event the type of the event (e.g. 'click').
 */
function triggerEvent( elem, event ) {
  var clickEvent = new Event( event ); // Create the event.
  elem.dispatchEvent( clickEvent );    // Dispatch the event.
}

Ссылка

5
ответ дан mnishiguchi 19 August 2018 в 13:03
поделиться

Лучший ответ - лучший! Тем не менее, это не вызвало событий мыши для меня в Firefox, когда etype = 'click'.

Итак, я изменил document.createEvent на 'MouseEvents' и это устранило проблему. Дополнительный код предназначен для проверки того, вмешивался ли какой-либо бит кода в событие, и если он был отменен, я бы зарегистрировал его для консоли.

function eventFire(el, etype){
  if (el.fireEvent) {
    el.fireEvent('on' + etype);
  } else {
    var evObj = document.createEvent('MouseEvents');
    evObj.initEvent(etype, true, false);
    var canceled = !el.dispatchEvent(evObj);
    if (canceled) {
      // A handler called preventDefault.
      console.log("automatic click canceled");
    } else {
      // None of the handlers called preventDefault.
    } 
  }
}
6
ответ дан Nate Barbettini 19 August 2018 в 13:03
поделиться
Другие вопросы по тегам:

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