Форум программистов, компьютерный форум, киберфорум
ActionScript
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 30.06.2015
Сообщений: 2
1

Битва с HTMLLoader-ом (эмуляция клика)

06.11.2015, 18:05. Показов 857. Ответов 4
Метки нет (Все метки)

Пример:
Браузер
есть сайт http://randstuff.ru/number/, мне нужно программно нажать на кнопку с генерировать.
Что бы это сделать через консоль браузера, достаточно найти id кнопки и выполнить в консоли веб-разработчика:document.getElementById("button").click();

Теперь as3
ActionScript 3
1
2
3
4
5
6
7
8
9
var html:HTMLLoader = new HTMLLoader; 
var urlReq:URLRequest = new URLRequest("http://randstuff.ru/number/");
addChild(html);
html.addEventListener(Event.COMPLETE, onLoad);
html.load(urlReq);
 
function onLoad(e:Event):void {
     html.window.document.getElementById("button").click();
}
И конечно компилятор справедливо скажет: click is not a function
Собственно вопрос, как все таки вызвать js функцию click из as3?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.11.2015, 18:05
Ответы с готовыми решениями:

Эмуляция клика JS
Подскажите можно ли эмулировать клик ЛКМ/ПКМ при помощи JS, если можно то желательно сразу...

Эмуляция клика мыши
Как эмулировать нажатие мыши на определенной точки на экране

Эмуляция клика мыши в координату
Программа эмулирует нажатия мыши. С кликом в текущие координаты курсора справляется, а если...

Эмуляция клика. Не работает координата y
Здравствуйте! Помогите, по данному коду курсор перемещается только по координатам x, а по y нет....

4
59 / 59 / 15
Регистрация: 06.05.2014
Сообщений: 206
06.11.2015, 21:43 2
Где будет выполняться ваше приложение? AIR или FlashPlayer? Если через плеер, то вам нужно использовать класс ExternalInterface для вызова кода JS
0
0 / 0 / 0
Регистрация: 30.06.2015
Сообщений: 2
07.11.2015, 16:37  [ТС] 3
Приложение будет выполняться в AIR, знаю про ExternalInterface, но как я понял нужно для неё нужно внедрить в страничку html свою swf.
Мое приложение играет роль браузера, редактировать html я не могу. Мне нужно просто обратиться к элементу и вызвать в нем js функцию click().
0
3 / 3 / 4
Регистрация: 11.10.2015
Сообщений: 156
07.11.2015, 17:42 4
Братан, смотри - все просто. У тебя, как я понял, есть функция function click(e:MouseEvent){} Где ты выполняешь код генерации. Для того чтобы нажать программно, нужно весь код перенести в функцию какую-нибудь произвольную и из функции click ее вызывать. Если непонятно объяснил, вот пример:
PHP/HTML
1
2
3
4
5
6
7
funciton click(e:MouseEvent){
    generate();
}
 
function generate(){
    ...тут код для генерации твоего числа...
}
Теперь для вызова генерации числа, ты можешь использовать функцию click, а можешь просто программно вызвать generate().
0
59 / 59 / 15
Регистрация: 06.05.2014
Сообщений: 206
07.11.2015, 19:13 5
До этого никогда не использовал класс HTMLLoader, поэтому решил написать тестовое приложение, и вам заодно помочь.
Вот код класса:
ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
package
{
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.html.HTMLLoader;
    import flash.net.URLRequest;
 
    public class HTMLLoaderTest extends Sprite
    {
        private var _htmlLoader:HTMLLoader;
        private var _button:Sprite;
 
        public function HTMLLoaderTest()
        {
            addEventListener(Event.ADDED_TO_STAGE, onAddedToStageHandler);
        }
 
        private function onAddedToStageHandler(event:Event):void
        {
            if (HTMLLoader.isSupported)
            {
                _htmlLoader = new HTMLLoader;
                var urlReq:URLRequest = new URLRequest("http://randstuff.ru/number/");
                _htmlLoader.width = stage.stageWidth;
                _htmlLoader.height = stage.stageHeight;
                addChild(_htmlLoader);
                _htmlLoader.addEventListener(Event.COMPLETE, onLoad);
                _htmlLoader.load(urlReq);
            } else
            {
                trace("HTMLLoader is not supported");
            }
 
            _button = new Sprite();
            _button.graphics.beginFill(0xFF0000);
            _button.graphics.drawRect(30, 30, 30, 30);
            _button.graphics.endFill();
            addChild(_button);
        }
 
        private function onLoad(e:Event):void
        {
            _button.addEventListener(MouseEvent.CLICK, clickButtonHandler);
        }
 
        private function clickButtonHandler(event:MouseEvent):void
        {
            var document:Object = _htmlLoader.window.document;
            var evt:Object = document.createEvent("MouseEvents");
            evt.initMouseEvent("click", true, true, _htmlLoader.window, 1, 0, 0, 0, 0, false, false, false, false, 0, null);
            var button:Object = _htmlLoader.window.document.getElementById("button");
            button.dispatchEvent(evt);
        }
    }
}
Код отправки события нашел в Интернете. В JS и HTML я не очень силён, но вроде работает все.
Пользуйтесь на здоровье.)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.11.2015, 19:13

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Программная эмуляция клика мыши
Какой функцией эмулировать нажатие левой кнопки мыши. И установить кол-во нажатий в секунду....

Эмуляция клика мышью к QTWebEngineView
Добрый день! Возникла проблема, решения которой не удалось найти самостоятельно. Было...

Эмуляция клика на гиперссылку по кнопке
Есть поле МЕМО, в котором, среди прочего текста, может находиться адрес электронной почты. ...

Эмуляция физического клика мышкой в браузере
Находил подобные темы в основном по эмуляции нажатию клавиш типо такой код // Create a new...

Эмуляция клика мышки в свёрнутом окне
Эмуляция клика мышки в свёрнутом окне то есть надо нажать "да" учитывая что приложение может быть...

WinApi эмуляция клика в стороннем приложении
Решил попробовать сделать обыкновенный кликер ЛКМ для одного приложения, подскажите какие варианты...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.