Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.01.2021, 22:11
Кандидат Javascript-наук
Отправить личное сообщение для Was-Ja Посмотреть профиль Найти все сообщения от Was-Ja
 
Регистрация: 20.09.2020
Сообщений: 130

Как правильно создать новый таб с html?
Добрый день,

есть клиент на JS, в котором формируются данные. На основе этих данных я хочу сгенерить html и по евенту разместить этот html в новый таб.

То есть грубо говоря, у меня есть где-то что-то примерно как

<a href="XXX" target="_blank">Ссылка откроется в новом окне</a>


и при нажатии на нее, вызывается моя функция в JS, которая генирирует текст для XXX и этот текст в виде html+js+css открывается в новом табе.

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

Запутался и не понимаю разумно это или нет, или есть какие-то более правильные методы, пожалуйста, посоветуйте, как это принято делать!!!

Для чего это мне, имею самопально написанную базу молекулярных структур https://www.elegant-nmr.com/mdb/ (форучанам - огромное спасибо за помощь!!!) . От пользователей появилась хотелка, чтобы пользователь мог сохранить одну молекулу себе в виде отдельного html и, возможно вставил бы себе на сайт со ссылкой на меня.

Спасибо!
Ответить с цитированием
  #2 (permalink)  
Старый 16.01.2021, 08:16
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,750

Что должен получить пользователь, страницу (текст HTML), или ссылку, по которой он должен будет получать страницу? Что он должен вставлять на свой сайт прямо страницу или ссылку, по которой он должен будет получать страницу от вашего сервера?
Просто сгенерить страницу (как текст) и перейти на нее несложно.
<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="Content-type" content="text/html; charset=utf-8" lang="ru">
  <meta name="viewport" content="width=device-width, initial-scale=1.0" >
</div>
<a id=link  target="_blank" >Открыть новую вкладку</a>
<script>
// Это текст новой страницы
 let page=`
<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="Content-type" content="text/html; charset=utf-8" lang="ru">
  <meta name="viewport" content="width=device-width, initial-scale=1.0" >
<style>
h3 {
	color:red;
}
</style>
<s`+`cript>
window.onload = function () {
	alert ('Вот. Сгенегили, открыли, вывели!')
}
</`+`script>
 </head>
 <body>
 <h3>New page</h3>
  Всякое бла-бла-бла<br>
 Очень много бла-бла-бла<br>
 Опять бла-бла-бла<br>
</body>
</html>
 `;  // конец текста сраницы
 // По клику на <a> формируем ему href
 document.getElementById('link').addEventListener('click', function () {
	let blob = new Blob([page], {type : 'text/html'});
	this.href = window.URL.createObjectURL(blob)
})
</script>
</body>
</html>

(С тегами <script></script> приходится поступать так. Иначе они распознаются парсером html как часть текущей страницы, а не как часть строки)

Но если нужна ссылка, то надо сгенерить URL в виде GET запроса к серверу со всеми параметрами. И давать ее

Последний раз редактировалось voraa, 16.01.2021 в 08:43.
Ответить с цитированием
  #3 (permalink)  
Старый 16.01.2021, 13:29
Кандидат Javascript-наук
Отправить личное сообщение для Was-Ja Посмотреть профиль Найти все сообщения от Was-Ja
 
Регистрация: 20.09.2020
Сообщений: 130

Огромное-преогромное спасибо!!!

Во, как раз то, что хотел!

У меня есть два варианта, если пользователь хочет вставить что-то стандартное, то проще сгенерировать на сервере страницу и дать на нее ссылку (это я понимаю как сделать), но есть случаи, когда пользователь хочет сделать специальную страничку на основании им отредактированных данных, и Ваш вариант, как раз и решает мою вторую задачу. СПАСИБО ОГРОМНОЕ!!!
Ответить с цитированием
  #4 (permalink)  
Старый 20.04.2021, 18:59
Кандидат Javascript-наук
Отправить личное сообщение для Was-Ja Посмотреть профиль Найти все сообщения от Was-Ja
 
Регистрация: 20.09.2020
Сообщений: 130

Позвольте, пожалуйста, поднять эту же тему.

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

То есть теперь хочется, чтобы ТАБ открывался не по нажатию ссылки, а по нажатию кнопки.

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

<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="Content-type" content="text/html; charset=utf-8" lang="ru">
  <meta name="viewport" content="width=device-width, initial-scale=1.0" >
</div>
<button><a id=link  target="_blank" >Открыть новую вкладку</a></button>
<script>
// Это текст новой страницы
 let page=`
<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="Content-type" content="text/html; charset=utf-8" lang="ru">
  <meta name="viewport" content="width=device-width, initial-scale=1.0" >
<style>
h3 {
    color:red;
}
</style>
<s`+`cript>
window.onload = function () {
    alert ('Вот. Сгенегили, открыли, вывели!')
}
</`+`script>
 </head>
 <body>
 <h3>New page</h3>
  Всякое бла-бла-бла<br>
 Очень много бла-бла-бла<br>
 Опять бла-бла-бла<br>
</body>
</html>
 `;  // конец текста сраницы
 // По клику на <a> формируем ему href
 document.getElementById('link').addEventListener('click', function () {
    let blob = new Blob([page], {type : 'text/html'});
    this.href = window.URL.createObjectURL(blob)
})
</script>
</body>
</html>


Пожалуйста, подскажите, можно ли у кнопки как-то свойство href создать, чтобы такой ТАБ открыть?

Спасибо!
Ответить с цитированием
  #5 (permalink)  
Старый 20.04.2021, 19:05
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,227

Was-Ja, тебя кто такое "научил" ваять?
Ответить с цитированием
  #6 (permalink)  
Старый 20.04.2021, 19:22
Кандидат Javascript-наук
Отправить личное сообщение для Was-Ja Посмотреть профиль Найти все сообщения от Was-Ja
 
Регистрация: 20.09.2020
Сообщений: 130

Сообщение от ksa Посмотреть сообщение
Was-Ja, тебя кто такое "научил" ваять?
здесь на форуме научили, я еще в сентябре прошлого года жаву от жавасткипта отличить не мог, а сейчас самописанный клиент на своей же базе: https://www.elegant-nmr.com/mdb.html?rm

А разве моя хотелка не логична - мне несколько бета тестеров именно это заметила.
Ответить с цитированием
  #7 (permalink)  
Старый 20.04.2021, 19:42
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,750

<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="Content-type" content="text/html; charset=utf-8" lang="ru">
  <meta name="viewport" content="width=device-width, initial-scale=1.0" >
</div>
<button id='but'>Открыть новую вкладку</button>
<script>
// Это текст новой страницы
 let page=`
<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="Content-type" content="text/html; charset=utf-8" lang="ru">
  <meta name="viewport" content="width=device-width, initial-scale=1.0" >
<style>
h3 {
    color:red;
}
</style>
<s`+`cript>
window.onload = function () {
    alert ('Вот. Сгенегили, открыли, вывели!')
}
</`+`script>
 </head>
 <body>
 <h3>New page</h3>
  Всякое бла-бла-бла<br>
 Очень много бла-бла-бла<br>
 Опять бла-бла-бла<br>
</body>
</html>
 `;  // конец текста сраницы
 // По клику на <a> формируем ему href
 document.getElementById('but').addEventListener('click', function () {
    let blob = new Blob([page], {type : 'text/html'});
    window.open(window.URL.createObjectURL(blob), '_blank')
})
</script>
</body>
</html>
Ответить с цитированием
  #8 (permalink)  
Старый 20.04.2021, 19:53
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,227

Сообщение от Was-Ja
А разве моя хотелка не логична
Хотеть заменить ссылку на кнопку - это одно...
А вот хранить некую страницу в переменной - это уже какой-то трэш.
Ответить с цитированием
  #9 (permalink)  
Старый 20.04.2021, 20:29
Кандидат Javascript-наук
Отправить личное сообщение для Was-Ja Посмотреть профиль Найти все сообщения от Was-Ja
 
Регистрация: 20.09.2020
Сообщений: 130

Супер, СПАСИБО огромное, voraa!!!
Ответить с цитированием
  #10 (permalink)  
Старый 20.04.2021, 20:35
Кандидат Javascript-наук
Отправить личное сообщение для Was-Ja Посмотреть профиль Найти все сообщения от Was-Ja
 
Регистрация: 20.09.2020
Сообщений: 130

Сообщение от ksa Посмотреть сообщение
Хотеть заменить ссылку на кнопку - это одно...
А вот хранить некую страницу в переменной - это уже какой-то трэш.
не, не треш. Тут смысл такой, у меня в базе почти миллиард геометрий молекул. Юзер долго и упорно ищет то, что он хочет, и, потом ему хочется запомнить результат поиска. А еще взять и послать результат поиска по мейлу своему знакомому. Вот тут я втыкаю найденную геометрию (она маленькая, килобайты примерно) и добавляю JS по отрисовке (70 килобайт), и, вуаля, человек имеет статический HTML, который ни на что не ссылается, но позволяет показывать найденную молекулу или набор молекул и, при необходимости сохранять пространственные координаты в общераспространенных форматах.

Я сам 30 лет назад о таком мечтал, но тогда у меня не было под рукой базы с миллиардом молекул, да и JS я тогда не знал, а на тикле такое нарисовать было очень не удобно.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как создать новый массив из массива внутри объекта? Enkille Общие вопросы Javascript 14 14.07.2016 18:26
Как корректно обрезать html в contenteditable div ? asker Events/DOM/Window 0 28.04.2016 17:04
как передавать данные из html? carder Общие вопросы Javascript 5 27.02.2016 19:46
Как правильно создать форму, работающую с внутренним сценарием arkushy Общие вопросы Javascript 13 13.07.2011 14:18
Как правильно очистить maxlength в input? Маэстро Events/DOM/Window 10 22.06.2011 18:14