Форум программистов, компьютерный форум, киберфорум
JavaScript для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/21: Рейтинг темы: голосов - 21, средняя оценка - 4.86
1 / 1 / 0
Регистрация: 12.08.2011
Сообщений: 111

Щелчок на iframe

23.06.2018, 17:16. Показов 4250. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!
Пробую делать биткоин кран. Если кто-то не знает, то это сайт напичканный рекламами. Посетитель должен сначала нажать на рекламу, которая находится внутри iframe другого сайта, потом нажать на кнопку roll (получить сатошки). Рекламу разместил. Перед разработкой сайта захватить щелчок на рекламу, и только потом сделать кнопку активной, но оказывается js не захватывает щелчок внутри iframe другого сайта. Если сделаю roll постоянно активной, то естественно посетители не будут щелкать на рекламу, а просто нажимать на roll. Будет ли у кого совет как это реализовать? Чтобы посетитель сначала сделал щелчок на рекламу и только потом на roll. Рекламная площадка естественно не моя и там нельзя вещать свой код. Что планирую:
1. Можно поместить iframe внутри div, потом div абсолютным позиционированием поместить над кнопкой roll и сделать 100% прозрачным. Этот div потом будет 5 секунд появляться над roll, потом 5 секунд пропадать. Тогда будет процент клика на рекламу 50/50.
2. Можно ли как нибудь перед щелчком резко поместить курсор на рекламу? Допустим посетитель хочет кликать на roll, а курсор кликает на указанную рекламу или что-то типа этого? Нельзя ли как нибудь переместить координаты клика? Клик должен быть именно с ip посетителя.
Спасибо за советы!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.06.2018, 17:16
Ответы с готовыми решениями:

Не срабатывают события из iframe при перетаскивании в этот iframe в Opera
Есть два фрейма. В первый вкладывается второй. При зажатии кнопки мыши на первом, если передвинуть курсор к второму, то события второго не...

Уменьшить размер iframe щелкнув по ссылке внутри iframe
Можно уменьшить размер iframe щелкнув по ссылке внутри iframe? Ситуация: на странице есть ссылка, открывающая модальное окно с iframe...

Могу ли я из одного iframe добраться к елментам другого iframe?
День добрый всем! Могу ли я из одного iframe добраться к елментам другого iframe, т.е.: Например есть два ифрейма: <iframe...

16
Модератор
Эксперт HTML/CSS
 Аватар для AlexZaw
2381 / 1741 / 677
Регистрация: 07.08.2016
Сообщений: 4,096
23.06.2018, 17:47
Почитайте здесь: https://context.tips/analitika... ry-plugin/
возможно поможет
1
1 / 1 / 0
Регистрация: 12.08.2011
Сообщений: 111
24.06.2018, 17:24  [ТС]
Спасибо за большое! Проверю!

Добавлено через 23 часа 29 минут
Подключил iframeTracker. Клик захватывает, спасибо большое!, но так и захватывает и правую кнопку. Как сделать, чтобы ловил только левую кнопку мыши?
0
Модератор
Эксперт HTML/CSS
 Аватар для AlexZaw
2381 / 1741 / 677
Регистрация: 07.08.2016
Сообщений: 4,096
24.06.2018, 17:47
Вот даже не подскажу, сам не пробовал, не щупал, как вариант вообще отключить правую кнопку мыши для всего документа
1
1 / 1 / 0
Регистрация: 12.08.2011
Сообщений: 111
25.06.2018, 17:55  [ТС]
Сам про это тоже подумал, Спасибо! Только она еще и на кнопку "win, tab, alt и RB" откликается. Tab, alt отменил, но клавиши win (91 и 92) не реагируют. Можно ли кнопки win как-то отменить? Код такой:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var cancelKeypress = false;
 
document.onkeydown = function(evt) {
    evt = evt || window.event;
    cancelKeypress = /^(9|18|91|92|93)$/.test("" + evt.keyCode);
    if (cancelKeypress) {
        return false;
        e.preventDefault();
    }
};
 
/* For Opera */
document.onkeypress = function(evt) {
    if (cancelKeypress) {
        return false;
    }
};
Добавлено через 23 минуты
И правая кнопка отменяется только на странице а не во фрейме

Добавлено через 6 часов 31 минуту
Есть плагин iframeTracker. Она по идее захватывает клики на iframe из другого iframe:
JavaScript
1
2
3
4
5
6
7
8
9
jQuery(document).ready(function($){
    $('.slide iframe').iframeTracker({
        blurCallback: function(){
                        
           console.log('iframeTracker');
        }
    });
  
});
Сам iframetracker:
JavaScript
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
/*!
 * jQuery iframe click tracking plugin
 *
 * @author Vincent Paré
 * @copyright © 2013-<%= grunt.template.today("yyyy") %> Vincent Paré
 * @license http://opensource.org/licenses/Apache-2.0
 * @version <%= pkg.version %>
 */
(function($) {
    // Tracking handler manager
    $.fn.iframeTracker = function(handler) {
        // Building handler object from handler function
        if (typeof handler == "function") {
            handler = {
                blurCallback: handler
            };          
        }
 
        var target = this.get();
        if (handler === null || handler === false) {
            $.iframeTracker.untrack(target);
        } else if (typeof handler == "object") {
            $.iframeTracker.track(target, handler);
        } else {
            throw new Error("Wrong handler type (must be an object, or null|false to untrack)");
        }
        return this;
    };
 
    // Iframe tracker common object
    $.iframeTracker = {
        // State
        focusRetriever: null,  // Element used for restoring focus on window (element)
        focusRetrieved: false, // Says if the focus was retrieved on the current page (bool)
        handlersList: [],      // Store a list of every trakers (created by calling $(selector).iframeTracker...)
        isIE8AndOlder: false,  // true for Internet Explorer 8 and older
 
        // Init (called once on document ready)
        init: function() {
            // Determine browser version (IE8-) ($.browser.msie is deprecated since jQuery 1.9)
            try {
                if ($.browser.msie === true && $.browser.version < 9) {
                    this.isIE8AndOlder = true;
                }
            } catch (ex) {
                try {
                    var matches = navigator.userAgent.match(/(msie) ([\w.]+)/i);
                    if (matches[2] < 9) {
                        this.isIE8AndOlder = true;
                    }
                } catch (ex2) {}
            }
 
            // Listening window blur
            $(window).focus();
            $(window).blur(function(e) {
                $.iframeTracker.windowLoseFocus(e);
            });
 
            // Focus retriever (get the focus back to the page, on mouse move)
            $("body").append('<div style="position:fixed; top:0; left:0; overflow:hidden;"><input style="position:absolute; left:-300px;" type="text" value="" id="focus_retriever" readonly="true" /></div>');
            this.focusRetriever = $("#focus_retriever");
            this.focusRetrieved = false;
 
            // Special processing to make it work with my old friend IE8 (and older) ;)
            if (this.isIE8AndOlder) {
                // Blur doesn't works correctly on IE8-, so we need to trigger it manually
                this.focusRetriever.blur(function(e) {
                    e.stopPropagation();
                    e.preventDefault();
                    $.iframeTracker.windowLoseFocus(e);
                });
 
                // Keep focus on window (fix bug IE8-, focusable elements)
                $("body").click(function(e) {
                    $(window).focus();                  
                });
                $("form").click(function(e) {
                    e.stopPropagation();
                });
 
                // Same thing for "post-DOMready" created forms (issue #6)
                try {
                    $("body").on("click", "form", function(e) {
                        e.stopPropagation();
                    });
                } catch (ex) {
                    console.log("[iframeTracker] Please update jQuery to 1.7 or newer. (exception: " + ex.message + ")");
                }
            }
        },
 
        // Add tracker to target using handler (bind boundary listener + register handler)
        // target: Array of target elements (native DOM elements)
        // handler: User handler object
        track: function(target, handler) {
            // Adding target elements references into handler
            handler.target = target;
 
            // Storing the new handler into handler list
            $.iframeTracker.handlersList.push(handler);
 
            // Binding boundary listener
            $(target)
                .bind("mouseover", { handler: handler }, $.iframeTracker.mouseoverListener)
                .bind("mouseout",  { handler: handler }, $.iframeTracker.mouseoutListener);
        },
 
        // Remove tracking on target elements
        // target: Array of target elements (native DOM elements)
        untrack: function(target) {
            if (typeof Array.prototype.filter != "function") {
                console.log("Your browser doesn't support Array filter, untrack disabled");
                return;
            }
 
            // Unbinding boundary listener
            $(target).each(function(index) {
                $(this)
                    .unbind("mouseover", $.iframeTracker.mouseoverListener)
                    .unbind("mouseout", $.iframeTracker.mouseoutListener);
            });
 
            // Handler garbage collector
            var nullFilter = function(value) {
                return value === null ? false : true;
            };
            for (var i in this.handlersList) {
                // Prune target
                for (var j in this.handlersList[i].target) {
                    if ($.inArray(this.handlersList[i].target[j], target) !== -1) {
                        this.handlersList[i].target[j] = null;
                    }
                }
                this.handlersList[i].target = this.handlersList[i].target.filter(nullFilter);
 
                // Delete handler if unused
                if (this.handlersList[i].target.length === 0) {
                    this.handlersList[i] = null;
                }
            }
            this.handlersList = this.handlersList.filter(nullFilter);
        },
 
        // Target mouseover event listener
        mouseoverListener: function(e) {
            e.data.handler.over = true;
            $.iframeTracker.retrieveFocus();
            try {
                e.data.handler.overCallback(this, e);
            } catch (ex) {}
        },
 
        // Target mouseout event listener
        mouseoutListener: function(e) {
            e.data.handler.over = false;
            $.iframeTracker.retrieveFocus();
            try {
                e.data.handler.outCallback(this, e);
            } catch (ex) {}
        },
 
        // Give back focus from an iframe to parent page
        retrieveFocus: function() {
            if (document.activeElement && document.activeElement.tagName === "IFRAME") {
                $.iframeTracker.focusRetriever.focus();
                $.iframeTracker.focusRetrieved = true;
            }
        },
 
        // Calls blurCallback for every handler with over=true on window blur
        windowLoseFocus: function(e) {
            for (var i in this.handlersList) {
                if (this.handlersList[i].over === true) {
                    try {
                        this.handlersList[i].blurCallback(e);
                    } catch (ex) {}
                }
            }
        }
    };
 
    // Init the iframeTracker on document ready
    $(document).ready(function() {
        $.iframeTracker.init();
    });
})(jQuery);
Но проблема в том, что она ловит не только левую кнопку мыши, но и правую. Посмотрите спецы, можно ли как нибудь переписать, чтобы она пропускала правую кнопку?
0
249 / 162 / 68
Регистрация: 10.12.2017
Сообщений: 558
25.06.2018, 18:40
JavaScript
1
$("body").click(function(e) { $(window).focus();});
function(e) где e.button номер кнопки: https://developer.mozilla.org/... ent/button
1
1 / 1 / 0
Регистрация: 12.08.2011
Сообщений: 111
26.06.2018, 05:45  [ТС]
Evgen1337, $("body").click(function(e) { $(window).focus();}); работает только внутри моей страницы и не работает в iframe. Или ты предлагаешь разместит его где-то внутри ifraetracker?

Добавлено через 1 час 24 минуты
Не знаю где его надо разместить. Я разместил его так, но она не работает:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
jQuery(document).ready(function($){
    $('.slide iframe').iframeTracker({
        blurCallback: function(){
           console.log('iframeTracker');          
           $("body").click(function(ev){
            $(window).focus();
                  if(ev.which == 3)
                  {
                        alert("Right mouse button clicked on element with id myId");
                  }
            });
        
        }
    });
    
});
Добавлено через 5 секунд
Не знаю где его надо разместить. Я разместил его так, но она не работает:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
jQuery(document).ready(function($){
    $('.slide iframe').iframeTracker({
        blurCallback: function(){
           console.log('iframeTracker');
           $(window).mousedown(function(ev){
    $(window).focus();
      if(ev.which == 3)
      {
            alert("Right mouse button clicked on element with id myId");
      }
});
        
        }
    });
    
});
0
249 / 162 / 68
Регистрация: 10.12.2017
Сообщений: 558
26.06.2018, 14:24
https://github.com/vincepare/i... /issues/13 - автор говорит нельзя понять

как варик попробовать iframe обернуть в div с большим z-index и на нем ловить клик, потом этому диву pointer events none и еще раз программно в это место клик ) с той кнопкой которую поймал div и так в цикле )))
1
1 / 1 / 0
Регистрация: 12.08.2011
Сообщений: 111
01.07.2018, 11:08  [ТС]
Рекламные компании смотрят ip кликнувшего, если сделать клик программно, то на клике будет ли ip юзера? При программном клике не будет ip сервера?
0
249 / 162 / 68
Регистрация: 10.12.2017
Сообщений: 558
02.07.2018, 14:48
tarabukinivan, программный клик бывает разный

1) https://stackoverflow.com/ques... javascript
2) Robot.js

При программном будет/не будет ) это 50/50, смотря какие условия...
0
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
06.07.2018, 15:30
AlexZaw, пошто рекламируете здесь всякую, извините, "хрень"?
iframe -- это по умолчанию инлайновый элемент (dispay == inline), оборачивать его в блоковый div -- это кретинизм чистой воды, тем паче вместо двух строк js-кода грузить "аграменный" плагин
0
Модератор
Эксперт HTML/CSS
 Аватар для AlexZaw
2381 / 1741 / 677
Регистрация: 07.08.2016
Сообщений: 4,096
06.07.2018, 16:11
Цитата Сообщение от kalabuni Посмотреть сообщение
пошто рекламируете здесь всякую, извините, "хрень"?
Я не рекламирую, сам этим вопросом никогда не занимался, а гугл в поиске выдал ссылку на плагин
Цитата Сообщение от kalabuni Посмотреть сообщение
тем паче вместо двух строк js-кода грузить "аграменный" плагин
Ну так подскажите эти пару строк
0
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
06.07.2018, 21:04
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<script>
onload = function ()
{
var sp = document.querySelector('#wrap');
var txa = document.querySelector('textarea');
sp.onmouseout = function () {sp.flag += 'out'; txa.value += 'курсор вне IFRAME\n'}
sp.onmouseover = function ()
   {
   txa.value += 'курсор над IFRAME\n';
   sp.flag = 'over';
   window.focus (); window.onblur = function ()
      {
      if (sp.flag == 'over' && sp.flag != 'out') txa.value += 'клик по IFRAME\n';
      window.focus ();
      }
   }
}
</script>
<span id="wrap"><iframe src="https://www.cyberforum.ru/"></iframe></span>
<p><textarea cols="35" rows="10"></textarea>
0
249 / 162 / 68
Регистрация: 10.12.2017
Сообщений: 558
06.07.2018, 21:18
kalabuni, это есть в iframeTracker
0
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
06.07.2018, 22:07
Цитата Сообщение от Evgen1337 Посмотреть сообщение
это есть в iframeTracker
так я и говорю -- зачем нужен этот iframeTracker, если его можно заменить двумя строками кода?

Цитата Сообщение от Evgen1337 Посмотреть сообщение
ловит не только левую кнопку мыши, но и правую. Посмотрите спецы, можно ли как нибудь переписать, чтобы она пропускала правую кнопку?
код ловит исключительно потерю фокуса окном в момент, когда курсор находится над IFRAME... ни о каких кнопках мыши код просто не в курсе
в общем, шнурки вам этот код не погладит
вести разговор о каком-то "программном клике" -- это ДС.младшая группа для тех, кто к JQuery относится как к волшебной палке
0
249 / 162 / 68
Регистрация: 10.12.2017
Сообщений: 558
07.07.2018, 00:17
Это не профессионально
Вопрос не решен
0
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
07.07.2018, 00:54
Evgen1337,
ТС может ещё захотеть, чтобы код делал регистрацию на чужой странице в iframe и сам писал там осмысленные сообщения... вы в этом случае тоже будете "профессионально" рассуждать о том, как научить код писать эти сообщения без грамматических ошибок (также, как сейчас "профессионально" рассуждаете о "программных кликах по чужому документу"), или всё же попытаетесь объяснить ТСу, что его фантазии должны иметь разумные пределы?...

я не собирался решать "проблему", озвученную ТСом, я лишь написал, то, что делает "чёрный ящик" под названием iframeTracker в несколько строчек нативного js, чтобы и у ТСа, да и у вас иссяк поток неразумной фантазии

Удачи "профессионалу" в решении любых, даже идиотских, вопросов!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.07.2018, 00:54
Помогаю со студенческими работами здесь

Почему не обрабатывается код?<IFRAME src = getsectioninfo.inc id = sectioninfo style = 'POSITION: absolute; VISIBILITY: hidden'></IFRAME>
Приветствую! Столкнулся с такой проблемой. Пишу '&lt;IFRAME src = getsectioninfo.inc id = sectioninfo style = 'POSITION: absolute;...

Возможно ли из iFrame обратитбся к контролу снаружи iFrame?
Имеется страница на которой есть текстбокс и iFrame. Возможно ли из страницы, загруженной в iFrame обратиться к текстбоксу, который...

Передача данных из iFrame в iFrame
Здравствуйте! Такой вопорсик: У меня на странице 2 элемента iFrame. В одном из них находится форма с данными. Как сделать сабмит...

Щелчок по компоненте
Подскажите пожалуйста как сделать! Мне надо, чтобы я нажала на стрелку (Label), а там вывелось сообщение о том, что я не ввела данные в...

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


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru