Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Помогите с <iframe> блокировкой клика (https://javascript.ru/forum/dom-window/29679-pomogite-s-iframe-blokirovkojj-klika.html)

MVS 07.07.2012 04:52

Помогите с <iframe> блокировкой открытия
 
Здравствуйте! В ходе создания сайта возникла проблема которую не могу решить, я использую <iframe> и задача такая, чтоб в окне <iframe> пользователь не смог перейти по ссылке вне <iframe>, то есть страница не открывалась в новой вкладке отдельно, и нельзя было скопировать адрес на ресурс находящийся в <iframe>.
Оптимальное решение заблокировать правую кнопку мышки и выделение-копирование текста.
Я использовал скрипт запрета - работает по всей странице кроме окна <iframe> - в окне <iframe> делай что хочешь!
Господа программисты, кто сталкивался с подобной ситуацией, помогите!!
ВОТ ПОЛНЫЙ КОД:

<style>
#mr { width:100%; height:900px;align: right;}
</style>

<div style="position: relative; width: 100%; height: 900px;">
<div style="left:0px; background: #708090; position: absolute; z-index: 2; width: 258px; height: 900px;"></div>
<div style="right:0px; background: #708090; position: absolute; z-index: 3; width: 275px; height: 900px;"></div>
<div style="background: #708090; position: absolute; z-index: 5; width: 100%; height: 159px;"></div>
<div style="background: #708090; position: absolute; z-index: 4; width: 99%; bottom: 0; height: 87px; "></div>
<div style="margin-top: 0px; z-index: 1; position: relative;">

<script type="text/javascript">
document.ondragstart = test;
document.onselectstart = test;
document.oncontextmenu = test;
function test() { return false; }
document.oncontextmenu;
function catchControlKeys(event){
var code=event.keyCode ? event.keyCode : event.which ? event.which : null;
if (event.ctrlKey){
// Ctrl+U
if (code == 117) return false;
if (code == 85) return false;
// Ctrl+C
if (code == 99) return false;
if (code == 67) return false;
// Ctrl+A
if (code == 97) return false;
if (code == 65) return false; }}
</script>

<iframe id="mr" frameborder="no" src="http://www.microtron.zp.ua/goods#i">
Ваш браузер не поддерживает плавающие фреймы!
</iframe>

</div>
</div>

PS: Хостинг от Ucoz. Для наглядности вот адрес сайта: http://citicom.at.ua/
:help:

vadim5june 07.07.2012 09:20

у iframe свое windows к которому вы не имеете доступа и не можете ничего заблокировать

Deff 07.07.2012 11:20

MVS,
1. вставьте фрейм полным рамером (он у Вас 666px на 3007px в div с position:relative;
2. Оберните этот div еще одним с размерами нужного вам окна просмотра и overflow-y: auto;
3. Прямо прмо перед фреймом вставьте прозрачную однопиксельную gif-картинку с размерами 100% Х 100% position:absolute;z-index:100;

MVS 07.07.2012 12:19

Да, но:
пользователь должен иметь возможность внутри фрейма просматривать весь товар имеющийся на сайте который внутри фрейма, то есть, левая кнопка должна кликать по товару, а правая нет, ведь все нарушения происходят именно из-за правой (открыть ссылку в новом окне / открыть в новой вкладке / скопировать адрес сайта и т.д)
Как реализовать только левую активную кнопку мышки?

Deff 07.07.2012 12:23

MVS,
Вы сделайте - а проникать по левой - сквозь свою картинку - уже проще

Вообще вру - выделить текст - наверняка не удастся - ищите в инете кроссдоменный аякс для get запросов

MVS 07.07.2012 12:37

Направьте пожалуйста в правильное русло - как проникнуть сквозь картинку? Первое условие с полупрозрачной картинкой выполнил
вот http://citicom.at.ua/
Как быть дальше?

Deff 07.07.2012 12:42

Цитата:

Сообщение от MVS
Как реализовать только левую активную кнопку мышки?

Никак - посколь Окно другое - не с Вашего домена

Deff 07.07.2012 12:43

Цитата:

Сообщение от MVS
Первое условие с полупрозрачной картинкой выполнил

Гы - криво сделали - ну да фиг сым - потестировал - если клик еще можем передать - то выделение текста сквозь - не удается
Цитата:

Сообщение от Deff
ищите в инете кроссдоменный аякс(jQuery) для get запросов

И вставляйте им полный контент фрейма

Или проксируйте на сервере (серверным запросом на свою страницу, а эту страницу вставляете уже к себе

vadim5june 07.07.2012 12:46

Цитата:

Сообщение от Deff (Сообщение 186979)
Никак - посколь Окно другое - не с Вашего домена

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

MVS 07.07.2012 13:19

Подскажите как это реализовать?
очень нужно, я являюсь партнером этого сайта, а прайсы постоянно делать очень долго - частое изменение товара, а так дал адрес сайта( уже своего), потребитель выбрал товар - пришел ко мне и заказал - а так пойдет к ним напрямую.

Нашел похожую тему http://javascript.ru/forum/dom-windo...j-vkladke.html реализация мне не понятна, опишите пожалуйста более подробно.
У кого есть еще какие нибудь мысли?
Жду вашей помощи!

MVS 07.07.2012 21:14

Цитата:

Сообщение от Deff (Сообщение 186981)
Гы - криво сделали - ну да фиг сым - потестировал - если клик еще можем передать - то выделение текста сквозь - не удается

И вставляйте им полный контент фрейма

Или проксируйте на сервере (серверным запросом на свою страницу, а эту страницу вставляете уже к себе

Но мне ведь так и нужно чтоб текст не выделялся, а был просто кликабельным левой кнопкой мышки

Deff 07.07.2012 21:32

MVS,
Тогда убирайте просто покрывающую картинку при наведении мыши и ставьте снова при правом нажатии - но без выделения - имхо кустарщина - ну захотел я скопировать данные - ручкой сейчас никто не пишет - ан фиг
Найдите кросс аякс - там нет сложностей или у партнёра просите json файл страницы - это решает большинство проблем

vadim5june 07.07.2012 21:42

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

Deff 07.07.2012 21:43

Ну киньте ссылку - скорее всего это правда - поскольку при клике и они сами подгружают данные

MVS 08.07.2012 02:29

Цитата:

Сообщение от Deff (Сообщение 187125)
MVS,
Тогда убирайте просто покрывающую картинку при наведении мыши и ставьте снова при правом нажатии - но без выделения - имхо кустарщина - ну захотел я скопировать данные - ручкой сейчас никто не пишет - ан фиг
Найдите кросс аякс - там нет сложностей или у партнёра просите json файл страницы - это решает большинство проблем

Подскажите код как это реализовать - идея очень даже подходящая!

Господа программисты - присоединяйтесь, не проходите мимо!

Balon 08.07.2012 11:49

И если не хочешь чтоб копировали, то надо закрывать старое доброе ctrl+insert .
Но ,если я не ошибаюсь ,где-то в системе можно переназначить клавиши копирования , поэтому необходимо решать проблему глобальнее.
На счет AJAX можешь почитать http://javascript.ru/ajax/cross-domain-scripting ,но самому пользоваться cross-domain еще не доводилось

Deff 08.07.2012 11:55

https://github.com/padolsey/jQuery-P...s-domain-ajax/

MVS 10.07.2012 11:15

Сколько потрачено времени, и ни к чему не пришел.
Может я не правильно выразил задачу?
Пользователь должен иметь возможность внутри фрейма просматривать весь товар имеющийся на сайте который внутри фрейма (левая кнопка должна кликать по товару)
но правая кнопка (открыть ссылку в новом окне / открыть в новой вкладке / скопировать адрес сайта и т.д) работать не должна, но или если работает, тогда содержимое ифрейма не должно открываться в новом окне
Как это реализовать?
это все здесь http://citicom.at.ua/

vadim5june 10.07.2012 11:54

Цитата:

Сообщение от MVS (Сообщение 187704)
Сколько потрачено времени, и ни к чему не пришел.
Может я не правильно выразил задачу?

Понятна задача-но iframe специально так спроектировали что бы подобные задачи нельзя было выполнить
window у основного документа и фрейма не перекрываются-то есть любое событие происходит или в одном окне или в другом(события не всплывают)
А как Вы теоретически даже можете из одного окна запретить событие в другом доступ к которому Вы не имеете?Никак
Я с самого начала же написал

Deff 10.07.2012 12:08

vadim5june,
Тут мы не во фрейме делали - а накрывали фрейм прозрачкой из главного окна

MVS 10.07.2012 12:08

тогда как мне здесь предложили, поставить прозрачный фон на весь ифрейм, а убирать ее по нажатию левой кнопки, по правой она остается и ничего не происходит, то есть нажали левую, прозрачный фон убрался - нажалась ссылка(открылась)
Как написать такое? Читал есть такое:
function fixWhich(e) {
if (!e.which && e.button) { // если which нет, но есть button...
if (e.button & 1) e.which = 1; // левая кнопка
else if (e.button & 4) e.which = 2; // средняя кнопка
else if (e.button & 2) e.which = 3; // правая кнопка
}
}
В скриптах не силен, в HTML норм.

vadim5june 10.07.2012 12:12

Цитата:

Сообщение от Deff (Сообщение 187715)
vadim5june,
Тут мы не во фрейме делали - а накрывали фрейм прозрачкой из главного окна

Я читал но нельзя никак поймать событие во фрейме из главного окна-как раз Ваш безуспешный опыт это и подтверждает
Если вы нажмете mausedoun на перекрывающем элементе и потом его уберете в фрейме никакого дауна не будет
а когда он второй раз кликнет уже во фрейме вы вообще об этом не узнаете никак из главного окна

Deff 10.07.2012 12:17

vadim5june,
Ксать интересно: - еще не экспериментировал - будет ли считывацо позиция курсора из главного окна - коли он над фреймом?
(*Вдруг ... пришло в голову

vadim5june 10.07.2012 12:19

Цитата:

Сообщение от Deff (Сообщение 187719)
vadim5june,
Ксать интересно: - еще не экспериментировал - будет ли считывацо позиция курсора из главного окна - коли он над фреймом?
(*Вдруг ... пришло в голову

без перекрывающего элемента однозначно нет

Deff 10.07.2012 12:19

Цитата:

Сообщение от vadim5june
Если вы нажмете mausedoun на перекрывающем элементе и потом его уберете в фрейме никакого дауна не будет

Гы - не так все просто -
Убираем по наведению мыши,
после уборки запускаем фликер генерацию этой жа картинки с частотой раз в 100ms с установкой на 10ms - которая и отследит правое нажатие - способ проверен

vadim5june 10.07.2012 12:23

Цитата:

Сообщение от Deff (Сообщение 187722)
Гы - не так все просто - после уборки запускаем фликер генерацию этой жа картинки с частотой раз в 100ms с установкой на 10ms - которая и отследит правое нажатие - способ проверен

Deff в конце концов Вы придете к тому что зря время потратили-хотя Вам это может что то дать

MVS 10.07.2012 12:26

Но а все-таки, как написать скрипт убирания фона по клику левой кнопки?
Если можно - пример в студию!
Буду экспериментировать

Deff 10.07.2012 15:01

Цитата:

Сообщение от vadim5june
Deff в конце концов Вы придете к тому что зря время потратили-хотя Вам это может что то дать

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

MVS 11.07.2012 19:35

Ну а все-таки, кто может выложить скрипт убирания изображения по клику мышки, я знаю есть функция clickdown и clickup,

function fixWhich(e) {
if (!e.which && e.button) { // если which нет, но есть button...
if (e.button & 1) e.which = 1; // левая кнопка
else if (e.button & 4) e.which = 2; // средняя кнопка
else if (e.button & 2) e.which = 3; // правая кнопка
}
}

но как ее использовать, я не знаю... слаб в яваскриптах в НТМL норм. Заранее спасибо тому, кто поможет!

Deff 11.07.2012 19:41

MVS,
Завтра постараюсь

vadim5june 11.07.2012 19:45

Цитата:

Сообщение от MVS (Сообщение 188139)
Ну а все-таки, кто может выложить скрипт убирания изображения по клику мышки, я знаю есть функция clickdown и clickup,

mousedown mouseup click-это не функции а события

MVS 11.07.2012 19:51

Цитата:

Сообщение от vadim5june (Сообщение 188144)
mousedown mouseup click-это не функции а события

Возможно, я не силен в выражениях...
Можете показать на примере это событие?

vadim5june 11.07.2012 20:08

Цитата:

Сообщение от MVS (Сообщение 188147)
Можете показать на примере это событие?

<div style='width:100px;height:50px;background:yellow' onclick=this.parentNode.removeChild(this)>click me</div>

dmitriymar 11.07.2012 21:25

Цитата:

Сообщение от MVS
Ну а все-таки, кто может выложить скрипт убирания изображения по клику мышки, я знаю есть функция clickdown и clickup,

Возможно теоретически это сработает,поскольку очерёдность событий будет даун,ап,клик.
А практически наврядли- нужно пробовать

MVS 11.07.2012 21:27

вот я и хочу попробовать, но при этом нуждаюсь в помощи!

vadim5june, скажите, как вернуть назад по клику вверх?

dmitriymar 11.07.2012 21:28

http://javascript.ru/tutorial/events

MVS 11.07.2012 21:38

Цитата:

Сообщение от dmitriymar (Сообщение 188171)

Я показывать свой скрин браузера не буду-там открыто вкладок: 28 в Хроме, и 16 в Мозиле!
Яваскрипты чета даются тяжело...

Кто может ответить - почему в хроме не обрабатываются те события, которые обрабатываются в мозиле?

dmitriymar 11.07.2012 21:41

Цитата:

Сообщение от MVS
Кто может ответить - почему в хроме не обрабатываются те события, которые обрабатываются в мозиле?

криворукость,браузерные огричения....

MVS 11.07.2012 21:52

Цитата:

Сообщение от dmitriymar (Сообщение 188176)
криворукость,браузерные огричения....

Скорее всего 30% / 70%
Вот это в хроме не работает-почему?

<script type="text/javascript">
function resize(img, x, y) {
img.width = x;
img.height = y;
}
</script>
</head>
<body>
<p><img src="images/figure.jpg" alt=""
onmouseout="resize(this, 100, 111)" onmouseover="resize(this, 200, 222)"></p>
</body>

Не хочу заморачиваться, но это факт! Может хром у меня кривой....

vadim5june 11.07.2012 21:59

Цитата:

Сообщение от MVS (Сообщение 188169)
vadim5june, скажите, как вернуть назад по клику вверх?

здесь мы объект уничтожили и его не вернешь можно было сдвинуть
<body onmousedown='document.getElementById("d1").style.top="500px"'  
onmouseup='document.getElementById("d1").style.top="5px"'>
<div id=d1  style='position:absolute;top:5px;width:100px;height:50px;background:yellow' >click me</div>


Часовой пояс GMT +3, время: 21:32.