Форум программистов, компьютерный форум, киберфорум
JavaScript для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
 Аватар для skapunker
-30 / 25 / 12
Регистрация: 13.12.2013
Сообщений: 1,465

Правильно ли так заменять содержимое страницы?

14.03.2024, 12:04. Показов 3050. Ответов 57
Метки js (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!

JavaScript
1
2
3
4
5
6
7
8
new_content = new DOMParser().parseFromString(new_content, "text/html");  
let doctype, html, head, body = '';            
if(new_content.doctype.name) doctype = "<!DOCTYPE " + new_content.doctype.name + ">";
head = new_content.head;
body = new_content.body;
 
document.body = body
document.head = head
Правильно ли так делать, если мне нужно перезаписать содержимое страницы? Или это ересь?
document.write использовать нельзя

Чисто технически браузер перезаписывает.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.03.2024, 12:04
Ответы с готовыми решениями:

Как сделать так, чтобы через FCKEditor можно было редактировать содержимое одной страницы из другой
Вообщем вопрос собственно в названии темы. Если кто может помочь, то буду очень благодарен.

Как во время побайтового чтения файла заменять его содержимое?
Здравствуйте. Есть задача написать программу шифрования любых файлов алгоритмом AES. Для экономия памяти решил отказаться от...

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

57
 Аватар для skapunker
-30 / 25 / 12
Регистрация: 13.12.2013
Сообщений: 1,465
15.03.2024, 09:14  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от mr_dramm Посмотреть сообщение
во первых я не понимаю по прежнему что вы делаете сайт или бота?
я делаю приложение для защиты от ботов,
после проверки на бота нужно показать пользователю контент сайта
0
 Аватар для voraa
1299 / 1290 / 191
Регистрация: 21.01.2024
Сообщений: 5,987
15.03.2024, 10:44
На странице почти всегда есть скрипты.
Заменой head и body их нельзя заставить работать. Также как и через innerHTML.

Только либо потом отдельно их вставлять, как элементы <script> в нужные места в нужной последовательности
(Но при этом сомнительно, что будет происходить обработка события DOMContentLoaded).

Ну и либо через document.write
0
 Аватар для skapunker
-30 / 25 / 12
Регистрация: 13.12.2013
Сообщений: 1,465
15.03.2024, 11:16  [ТС]
Цитата Сообщение от voraa Посмотреть сообщение
На странице почти всегда есть скрипты
вот это уже другой интересный момент который тоже нужно учитывать

Добавлено через 32 секунды
Цитата Сообщение от voraa Посмотреть сообщение
Ну и либо через document.write
нужен аналогичный метод
0
 Аватар для voraa
1299 / 1290 / 191
Регистрация: 21.01.2024
Сообщений: 5,987
15.03.2024, 11:18
Цитата Сообщение от skapunker Посмотреть сообщение
нужен аналогичный метод
Я всегда в таких случаях напеваю

Джаваскрипт придуман не нами,
Джаваскрипт придуман не мной
...

Ну нету вот другого метода.
0
 Аватар для skapunker
-30 / 25 / 12
Регистрация: 13.12.2013
Сообщений: 1,465
15.03.2024, 11:21  [ТС]
Цитата Сообщение от voraa Посмотреть сообщение
Ну нету вот другого метода.
может и есть, просто мы о нем не знаем
но кто нибудь умный определенно знает
0
168 / 146 / 32
Регистрация: 03.09.2018
Сообщений: 499
15.03.2024, 11:56
iframe в помощь

Кликните здесь для просмотра всего текста
CSS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    body, html {
            margin: 0;
            padding: 0;
            overflow: hidden;
            height: 100%;
        }
        iframe {
            position: absolute;
            width: 100%;
            height: 100%;
            top: 0;
            left: 0;
            border: none;
        }


Добавлено через 2 минуты
https://codepen.io/Carleslc/pen/QRZgyx
0
 Аватар для sad67man
2605 / 1509 / 689
Регистрация: 23.08.2015
Сообщений: 3,841
15.03.2024, 12:02
Цитата Сообщение от mr_dramm Посмотреть сообщение
крайне странный подход, но можно конечно испльзовать пременную body.innerHTML чтобы туда залить body а head сгенерировать сразу и неменять
Вот о чем я и говорю.. Не понятно, почему автор не может отдать готовый head, зачем его менять? что случится с ботом, если он его увидит? А скриптом подменять только body. Это тоже самое, что и подгружать контент, только он уже будет загружен. Автор так и не ответил на этот вопрос...
Цитата Сообщение от voraa Посмотреть сообщение
На странице почти всегда есть скрипты.
Как правило скрипты подключаются в конце body, если их соблюдать, то проблем не будет.. Конечно такая "защита" будет накладывать некоторые ограничения. Но если очень хочется, то это нужно будет учитывать при разработке. Это просто вопрос способа их подключения, их можно подключать и скриптами, вы можете взять контент и перенести все скрипты вниз, как это делает битрикс...
Цитата Сообщение от skapunker Посмотреть сообщение
после проверки на бота нужно показать пользователю контент сайта
Ну тогда можно посмотреть в сторону перезагрузки страницы. Если пройдена капча, добавьте какой-нибудь токен в куки и перезагружаете страницу. Если в куках ключа нет - показываете капчу.

Добавлено через 4 минуты
Цитата Сообщение от Именч Посмотреть сообщение
iframe в помощь
С iframe могут быть проблемы с переходами по ссылкам внутри сайта. Адресная строка не будет меняться
0
Молодой техлид)
Эксперт JSЭксперт HTML/CSS
 Аватар для mr_dramm
1818 / 1056 / 329
Регистрация: 17.07.2021
Сообщений: 2,147
Записей в блоге: 14
15.03.2024, 13:26
Цитата Сообщение от sad67man Посмотреть сообщение
Вот о чем я и говорю.. Не понятно, почему автор не может отдать готовый head, зачем его менять? что случится с ботом, если он его увидит? А скриптом подменять только body. Это тоже самое, что и подгружать контент, только он уже будет загружен. Автор так и не ответил на этот вопрос...
Да вообще только сам элемент head не перезаписываемый, но его дочерние элементы можно изменять, так что можно даже и добавить уже после успешного прохождения капчи нужные элементы в head.

Еще можно сдеать редирект после успешного прохождения, это вообще решит много проблем, но конечно страница перезагрузится что будет странно смотреться если это spa

skapunker, другое дело что от ботов капча спасет наврятли, ее мжет пройти чел записать нужные куки и далее бот работает с сайтом, а вот сокрытие боди навредит, так как поисковый бот не сможет индекировать сайт
0
 Аватар для voraa
1299 / 1290 / 191
Регистрация: 21.01.2024
Сообщений: 5,987
15.03.2024, 13:41
Цитата Сообщение от sad67man Посмотреть сообщение
А скриптом подменять только body.
Цитата Сообщение от sad67man Посмотреть сообщение
Как правило скрипты подключаются в конце body, если их соблюдать, то проблем не будет..
"Как правило" - это не вариант. В head тоже часто загрузку скриптов размещают, особенно модули.
Как правило в скриптах есть важный обработчик события DOMContentLoaded. При замене body, даже если потом аккуратненько подключать все эти скрипты, это событие происходить не будет.

Цитата Сообщение от mr_dramm Посмотреть сообщение
Да вообще только сам элемент head не перезаписываемый
Он вполне себе перезаписываемый. Только не прямым присваиванием, а через replaceWith или replaceChild.
1
 Аватар для skapunker
-30 / 25 / 12
Регистрация: 13.12.2013
Сообщений: 1,465
15.03.2024, 14:15  [ТС]
Цитата Сообщение от sad67man Посмотреть сообщение
Не понятно, почему автор не может отдать готовый head, зачем его менять? что случится с ботом, если он его увидит?
потому что у страницы проверки свой head

Цитата Сообщение от sad67man Посмотреть сообщение
Как правило скрипты подключаются в конце body, если их соблюдать, то проблем не будет..
скрипты могут быть подключены где угодно, поэтому решение нужно универсальное

Цитата Сообщение от sad67man Посмотреть сообщение
Ну тогда можно посмотреть в сторону перезагрузки страницы.
раньше у меня так и было, но тут проблема - пропадает реферер. Можно конечно сохранить реферер в куки и потом перезаписать, но опять придется использовать костыли на сайте, чтобы перезаписывать реферер и удалять куки с реферером. Я пришел к выводу, что перезагрузка страницы это дичь.

Цитата Сообщение от sad67man Посмотреть сообщение
С iframe могут быть проблемы с переходами по ссылкам внутри сайта
iframe в данном случае это дичайшая дичь
0
 Аватар для sad67man
2605 / 1509 / 689
Регистрация: 23.08.2015
Сообщений: 3,841
15.03.2024, 15:26
Цитата Сообщение от skapunker Посмотреть сообщение
поэтому решение нужно универсальное
Универсальное решение в любом случае не получится сделать.. Для начала делайте частные решения, потом уже их можно будет проанализировать и придумать общее.. хотя возможно этого и не потребуется.
Цитата Сообщение от skapunker Посмотреть сообщение
iframe в данном случае это дичайшая дичь
Как и попытка подменить весь html.. Получается, что вариант с перезагрузкой самый оптимальный. А реферер - зачем он вам нужен? Чтоб определить откуда пришел пользователь обычно делают специальные ссылки. Да и реферер доступен на этапе капчи, т.е. при необходимости его можно получить. Так чтоб вообще без побочных эффектов скорее всего не получится сделать.

Добавлено через 9 минут
Цитата Сообщение от mr_dramm Посмотреть сообщение
skapunker, другое дело что от ботов капча спасет наврятли, ее мжет пройти чел записать нужные куки и далее бот работает с сайтом, а вот сокрытие боди навредит, так как поисковый бот не сможет индекировать сайт
Не будете же проходить капчу на каждой странице, а если защищать только главную - то это того не стоит.

Тоже самое можно и научить бота читать данные с переменной в js. Если вы частично обойдете защиту вручную, а потом полностью сымитуруете запрос.. то на стороне сервера вы уже никак это не определите.. Единственное, что при подозрительных действиях можно просто удалить токен и заставить пройти капчу еще раз. Вариант с сокрытием данных на стороне сервера кажется более подходящим.
0
Молодой техлид)
Эксперт JSЭксперт HTML/CSS
 Аватар для mr_dramm
1818 / 1056 / 329
Регистрация: 17.07.2021
Сообщений: 2,147
Записей в блоге: 14
15.03.2024, 16:58
Цитата Сообщение от sad67man Посмотреть сообщение
Не будете же проходить капчу на каждой странице, а если защищать только главную - то это того не стоит.
я не знаю что планируется делать... на всех страницах или только на одной =)

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

кликать можно и по скринам с помощью питона таких кликеров/кравлеров пруд пруди если уж сильно заморочиться

также еще раз напомню что негативно скажется на работе ботов поисковых систем, или может от них нужна защита? тогда от них то как раз есть дока по защите на сайте поисковиков =)

мое мнение что эта защита больше проблема чем защита... но это лишь мое скромное ИМХО

Цитата Сообщение от sad67man Посмотреть сообщение
Тоже самое можно и научить бота читать данные с переменной в js. Если вы частично обойдете защиту вручную, а потом полностью сымитуруете запрос.. то на стороне сервера вы уже никак это не определите.. Единственное, что при подозрительных действиях можно просто удалить токен и заставить пройти капчу еще раз. Вариант с сокрытием данных на стороне сервера кажется более подходящим.
я это предлагал когда писал что эта капча может работать также как и логин с сессией на сервере тут может недостаточно понятно описал
1
 Аватар для skapunker
-30 / 25 / 12
Регистрация: 13.12.2013
Сообщений: 1,465
15.03.2024, 20:29  [ТС]
Цитата Сообщение от sad67man Посмотреть сообщение
Универсальное решение в любом случае не получится сделать..
Сервисы проверки ботов типа Cloudflare или ddosguard как то же показывают сайт. Это же не волшебным образом происходит.

Цитата Сообщение от sad67man Посмотреть сообщение
А реферер - зачем он вам нужен?
как зачем? для счетчиков

Цитата Сообщение от sad67man Посмотреть сообщение
Чтоб определить откуда пришел пользователь обычно делают специальные ссылки.


Цитата Сообщение от sad67man Посмотреть сообщение
Не будете же проходить капчу на каждой странице, а если защищать только главную - то это того не стоит.
не нужно думать о том, как работает защита и что она проверяет, уже все сделано, нужно просто перезаписать страницу

Цитата Сообщение от sad67man Посмотреть сообщение
Тоже самое можно и научить бота читать данные с переменной в js.
неважно что делают боты, дело не в том пройдут они проверку или нет, а в том, как перезаписать страницу

Цитата Сообщение от mr_dramm Посмотреть сообщение
также еще раз напомню что негативно скажется на работе ботов поисковых систем, или может от них нужна защита?
поисковые системы вообще не фильтруются и свободно заходят на сайт, опять же повторю это неважно, так как нам нужно перезаписать страницу, а не думать о поисковых системах

Цитата Сообщение от mr_dramm Посмотреть сообщение
мое мнение что эта защита больше проблема чем защита
нет, это хорошая штука, я такого еще не видел, такое приложение сделал что сам в шоке,
нужно только найти рабочий метод перезаписи страницы

Добавлено через 2 минуты
Вы спросите, а почему нельзя использовать document.write?

А я отвечу: его можно использовать, но он какой то неполноценный. Гугл хром ругается, мол метод медленный, и не хочет грузить внешние файлы, например скрипты со сторонних CDNов и т.д.
0
-11 / 6 / 0
Регистрация: 23.02.2023
Сообщений: 431
15.03.2024, 20:55
Цитата Сообщение от skapunker Посмотреть сообщение
Вы спросите, а почему нельзя использовать document.write?

А я отвечу: его можно использовать, но он какой то неполноценный.
а чем не устраивают другие методы? например console.log, inerthtml
0
 Аватар для skapunker
-30 / 25 / 12
Регистрация: 13.12.2013
Сообщений: 1,465
15.03.2024, 20:58  [ТС]
Цитата Сообщение от бел ка Посмотреть сообщение
а чем не устраивают другие методы?
причем тут консоль?
что касается другого метода, указанного в твоем сообщении - выше выяснилось что он не годится
0
-11 / 6 / 0
Регистрация: 23.02.2023
Сообщений: 431
15.03.2024, 21:03
Цитата Сообщение от skapunker Посмотреть сообщение
причем тут консоль?
что касается другого метода, указанного в твоем сообщении - выше выяснилось что он не годится
есть ещё метод inerttext...
0
168 / 146 / 32
Регистрация: 03.09.2018
Сообщений: 499
15.03.2024, 22:49
Цитата Сообщение от sad67man Посмотреть сообщение
С iframe могут быть проблемы с переходами по ссылкам внутри сайта. Адресная строка не будет меняться
Придётся писать хуки, но это не страшно для такой задачи

Цитата Сообщение от skapunker Посмотреть сообщение
iframe в данном случае это дичайшая дичь
Почему же ? У вас есть полностью изолированный контейнер, в который боты не смогут никаким образом проникнуть.

Добавлено через 12 минут
https://github.com/davidjbradshaw/iframe-resizer
https://github.com/davidjbrads... izer-react
0
 Аватар для voraa
1299 / 1290 / 191
Регистрация: 21.01.2024
Сообщений: 5,987
16.03.2024, 07:51
Цитата Сообщение от skapunker Посмотреть сообщение
Вы спросите, а почему нельзя использовать document.write?
А я отвечу: его можно использовать, но он какой то неполноценный. Гугл хром ругается, мол метод медленный, и не хочет грузить внешние файлы, например скрипты со сторонних CDNов и т.д.
И правда. Внешние скрипты не грузятся.
Но остальные варианты даже внутренние скрипты не выполняют.
Я пробовал через
JavaScript
1
2
const bloburl = window.URL.createObjectURL(blob);
window.open(bloburl, "_self")
Все работает, все грузится, но идет подмена url в адресной строке на что то типа
blob:null/2be2c541-5770-4648-8412-8e1fd8e9ba38

И перезагрузку страницы, естественно сделать нельзя.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.03.2024, 07:51

Чем лучше заменять пробелы в имени страницы?
Допустим есть страница с именем: &quot;матрасы для слонов&quot; Интересует, что предпочтительней использовать для замены пробелов и почему? ...

Программа должна заменять МА на КО но что то не так написал
Подскажите где ошибка? Программа должна заменять МА на КО но что то не так написал #include &lt;stdio.h&gt; #include &lt;conio.h&gt; ...

Как правильно сравнивать подстроки строк и заменять их (нельзя использовать str.replace)?
#include &lt;iostream&gt; #include &lt;string&gt; int main() { std::string str; getline(std::cin,str); const int n = 5; std::string...

Парсер страницы выводящий основное содержимое страницы
Здравствуйте! Нужно написать парсер, который анализирует содержимое страницы по указанному URL и выводит ту часть, где заключена основная...

Как сделать так, чтобы задний фон страницы не прокручивался вместе с передним фоном страницы ?
Как сделать так, чтобы задний фон страницы не прокручивался вместе с передним фоном страницы ?


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

Или воспользуйтесь поиском по форуму:
58
Ответ Создать тему
Новые блоги и статьи
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru