Перекрытие веб-сайта с iframe

Я разрабатываю BHO, чтобы запретить доступ к запрещенным веб-сайтам. Поэтому, когда я нахожу определенный URL-адрес, я просто открываю iframe с кодом ниже:

Document:= IE.Document as IHTMLDocument2;
iFrame:= Document.createElement('iframe');
iFrame.setAttribute('src', 'denied.html', 0);
iFrame.setAttribute('position', 'fixed', 0);
iFrame.style.width:= '100%';
iFrame.style.left:= '0px';
iFrame.style.top:= '0px';
iFrame.style.border:= '0px';
iFrame.style.height:= '100%';
(Document.body as IHTMLDomNode).appendChild(iFrame as IHTMLDomNode);

но этот код просто открывает iframe в небольшом пространстве в конце веб-сайта. Как перекрыть весь сайт содержимым моего iframe?


person HwTrap    schedule 16.08.2012    source источник


Ответы (2)


Установите положение absolute.

person YardenST    schedule 16.08.2012
comment
затем пользователь использует свой инструмент против рекламы или просто нажимает F12 и полностью удаляет этот кадр. Если сайт запрещен - его содержимое должно быть удалено, а не замаскировано. - person Arioch 'The; 16.08.2012
comment
Я только что ответил на вопрос. не пытаясь предложить новый путь. Конечно, использование этого метода не блокирует веб-страницу. но для детей, скажем, это достаточно хорошо... если требуется полное ограничение, он должен использовать прокси и отправлять собственное сообщение, когда пользователь пытается получить доступ к некоторому URL-адресу - person YardenST; 16.08.2012
comment
Спасибо за ваш ответ, но я все еще получаю iframe в конце сайта и не перекрываю его. - person HwTrap; 16.08.2012
comment
Хорошо, какой браузер и ОС вы используете? - person YardenST; 16.08.2012
comment
У меня работает, может на странице есть элементы выше <body>? - person YardenST; 16.08.2012
comment
Я очищаю всю веб-страницу с помощью: Document.body.innerHTML:= '';, а они внедряют iframe с помощью: iFrame:= Document.createElement('iframe'); iFrame.setAttribute('src', 'denied.html', 0); iFrame.setAttribute('position', 'absolut', 0); iFrame.style.width:= '100%'; iFrame.style.height:= '100%'; iFrame.style.left:= '100%'; iFrame.style.top:= '100%'; iFrame.style.border:= '0px';, но теперь iframe находится поверх страницы. - person HwTrap; 16.08.2012
comment
это так: ссылка на всю загружаемую веб-страницу в маленьком фрейме... ширина равна 100%, а высота равна 10%... - person HwTrap; 16.08.2012
comment
Поскольку высота относится к родительскому узлу, убедитесь, что родительский узел также равен 100% (<html>?) - person YardenST; 16.08.2012
comment
Послушайте, я думаю, что лучшее решение — не использовать iframe. Я могу отменить навигацию по событию BeforeNavigate2, затем вызвать процедуру для загрузки тела src из другого html... Что-то вроде Document.body.innerhtml = 'denied.html'... знаете, как это сделать? - person HwTrap; 16.08.2012
comment
Это, вероятно, лучшее решение для вашего проекта, Hwtrap, но вы получите лучшие результаты, если зададите этот вопрос отдельно, а не похороните его в комментариях к ответу на другой вопрос. Этот вопрос касается того, как сделать так, чтобы фреймы отображались, а не как заблокировать доступ к веб-сайтам. - person Rob Kennedy; 16.08.2012

Если вы хотите полностью заблокировать - вы не должны ДОБАВЛЯТЬ элемент, вы должны ЗАМЕНИТЬ его.

Итак, вам нужно сделать полноценную HTML-страницу. Тогда вы, вероятно, можете перенаправить браузер на него, изменив свойство Document.Location. Или замените старый контент новым, выполнив Document.OuterHTML := .... вашу строку.

Эмпирическое правило простое - не добавляйте заменой, так или иначе.

PS: почему BHO только для IE, который можно легко отключить в настройках браузера? Я бы лучше запретил запрещенные сайты через \windows\system32\drivers\etc\hosts или через групповые политики. Гораздо надежнее.

person Arioch 'The    schedule 16.08.2012
comment
Спасибо за советы, но изменение DNS вызовет некоторые проблемы в сети. И другие браузеры не возможны на компьютерах, на которых он будет установлен. - person HwTrap; 16.08.2012
comment
хорошо, тогда вам нужно заменить источники, как я изложил здесь, и как вы согласны в комментариях к ответу @YardenST. Только туда нужно ставить не имя файла, а содержимое файла. Вам нужно прочитать файл в памяти, а затем поместить его содержимое в тело. но, может быть, даже лучше было бы заменить HTML, а не тело. тому есть две причины. 1: HTML/HEAD уже может содержать некоторые данные, такие как JavaScript или CSS. Лучше удалить все данные, чем часть. 2: Часть HEAD определяет кодировку части BODY. Символы в памяти должны быть последовательно объявлены в заголовке. Так что вам лучше заменить старое значение - person Arioch 'The; 17.08.2012