Crossrider - Как инициировать события действий пользователя на странице?

Я новичок в Crossrider и хочу иметь возможность запускать события на основе взаимодействия пользователя со страницей.

Например, воспроизводить звук, когда пользователь наводит курсор на элемент ввода html:

расширение.js

appAPI.ready(function() {
    //the link to Alarm01 is valid
    var Alarm01 = new Audio('http://localhost/playing-with-sound/jquery%20mobile%20forms/sounds/Alarm01.wav') 
    $('input').mouseenter(function(){
        Alarm01.play();
    })
});

Код выше не работает. Кто-нибудь знает, как правильно это сделать?

Я также пытался поместить его в background.js - это тоже не работает. Я использую Chrome в качестве браузера.

Идея состоит в том, чтобы пользователь мог выбрать событие во всплывающем окне (например, воспроизвести Alarm01 при наведении курсора на элемент ввода), а затем немедленно применить его к текущей веб-странице. Так что в следующий раз, когда пользователь наведет курсор на элемент ввода, будет воспроизводиться Alarm01.

Каков правильный способ доступа к элементам HTML-страницы в расширении Crossrider?

Благодарю вас!

EDIT: дополнительный вопрос

Можно ли запускать события при взаимодействии пользователя с элементами JQuery Mobile? Например, элемент data-role="slider":

appAPI.ready(function($) {
    //the link to Alarm01 is valid
    var Alarm01 = new Audio('http://localhost/playing-with-sound/jquery%20mobile%20forms/sounds/Alarm01.wav');
    // Add audio to page
    document.body.appendChild(Alarm01);
    $('[data-role=slider]').on('change', function(){
        Alarm01.play();
    })

});

Спасибо!!!!

EDIT: Если я включу JQuery Mobile в extension.js, я получу в два раза больше каждого элемента на мобильном веб-сайте. Поэтому вместо одного элемента data-role="slider" я получаю два...

Я получаю это: Я понимаювместо этого: Я хочу это


person Ekaterina    schedule 29.03.2014    source источник


Ответы (1)


Ты почти там. В вашем коде вы создали аудиообъект в области расширения. Однако для воспроизведения аудио необходимо добавить его в область страницы (HTML DOM). Следовательно, просто добавьте его в тело страницы, и он работает, что-то вроде:

appAPI.ready(function($) {
    //the link to Alarm01 is valid
    var Alarm01 = new Audio('http://localhost/playing-with-sound/jquery%20mobile%20forms/sounds/Alarm01.wav');
    // Add audio to page
    document.body.appendChild(Alarm01);
    $('input').mouseenter(function(){
        Alarm01.play();
    })
});

[Раскрытие информации: я сотрудник Crossrider]

person Shlomo    schedule 30.03.2014
comment
Привет, спасибо за ваш быстрый ответ. Теперь я получаю следующую ошибку в строке $('input').mouseenter... : **Uncaught TypeError: свойство '$' объекта [object Object] не является функцией. ** Я думаю, что-то не так с Загружается JQuery... Не знаете, как это исправить? - person Ekaterina; 30.03.2014
comment
Извините, я сосредоточился на проблеме со звуком и не заметил, что вы не указали $ в качестве параметра обратного вызова для appAPI.ready :-) Я исправил это в своем примере. - person Shlomo; 30.03.2014
comment
Дополнительный вопрос: возможно ли вызвать событие такого типа (например, воспроизведение звука) из файла background.js или даже из всплывающего файла в папке «Ресурсы»? Кажется, это не работает для меня. Благодарю вас! - person Ekaterina; 30.03.2014
comment
Только код в файле extension.js имеет возможность напрямую взаимодействовать с DOM страницы. Однако если у вас есть триггер в другой области действия (фон, всплывающее окно), вы можете передать ему сообщение между областями действия (например, от фона к расширению), чтобы область действия расширения выполняла действие. - person Shlomo; 30.03.2014
comment
Да, я так и думал. Благодарю вас! - person Ekaterina; 30.03.2014
comment
Шломо, я отредактировал свой вопрос, добавив дополнительный вопрос, не могли бы вы взглянуть на него и посмотреть, сможете ли вы также ответить на него? Благодарю вас! - person Ekaterina; 30.03.2014
comment
Я считаю, что проблема в том, что вам нужно загрузить библиотеку jquerymobile в область расширения для запуска события изменения. Попробуйте добавить appAPI.resources.includeRemoteJS('http://code.jquery.com/mobile/1.4.2/jquery.mobile-1.4.2.min.js'); - person Shlomo; 30.03.2014
comment
Это воспроизводит звук, но вызывает новые проблемы. Теперь библиотеки JQuery Mobile дважды применяются к мобильному веб-сайту, что вызывает сбои. Пожалуйста, смотрите мою правку! И еще раз спасибо, вы были так чрезвычайно полезны! :) - person Ekaterina; 31.03.2014
comment
Извините, боюсь, я не очень хорошо знаком с jQueryMobile, но, возможно, есть способ загрузить его без рендеринга элементов? В противном случае может быть невозможно использовать его в области расширения. - person Shlomo; 31.03.2014