Выстраивал высоту элементов, возник вопрос с определением высоты текста в UniHTMLFrame.
Способ №1 от Delphi Developer
1 2 |
js:='alert('+HTMLFrame.JSName+'.body.el.dom.scrollHeight);'; UniSession.JSCode(js); |
Способ №2
Мой способ, менее эффективный, с оборачиванием в div, но тоже рабочий.
Решил так.
Сначала обернем наш HTML в div c известным нам id
(как не оборачивать в div – пока не придумал, пробовал оборачивать временно в div, на время определения высоты текста, но пока безуспешно)
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 |
<div id=1234> <p> ОПЛАТА Наличная оплата (для Санкт-Петербурга и ЛО) Сумма к оплате указывается в высылаемом электронном подтверждении заказа. Оплата наличными осуществляется при получении заказа в розничных магазинах «Мир Шитья» или курьеру при доставке в соответствии с суммой в кассовом чеке. Предоставляемые документы: Чек Гарантийный талон* Безналичная оплата После оформления заказа и согласования условий доставки, на Ваш E-mail придет счет на оплату. Платеж поступает к нам на счет через 1-2 банковских дня после оплаты счета. Отгрузка в транспортную компанию происходит в течение 1-2 рабочих дней, после поступления платежа. Предоставляемые документы: Счет-фактура, счет (юридическим лицам) Накладная Гарантийный талон* Оплата банковскими картами Для оплаты картой выберите соответствующий пункт при оформлении заказа. К оплате принимаются карты MasterCard, VISA, JCB и Diners Club, а так же с помощью платежных систем Яндекс деньги, WebMoney, Веб-кошелек ПСКБ, Терминал ПСКБ, Альфа Клик. Перед оплатой проверьте, пожалуйста, наличие товара у менеджера. Предоставляемые документы: Накладная Гарантийный талон* Описание процесса оплаты После завершения оформления заказа в нашем магазине, для выбора способа оплаты с помощью карты на соответствующей странице сайта Вам необходимо нажать кнопку «Оплата картой», при этом система перенаправит Вас на защищенную страницу Банка для ввода реквизитов карты. После того, как Вы полностью ввели данные и нажали кнопку «Продолжить», система уведомит Вас о результатах проведения транзакции. В случае отказа в авторизации карты Вы сможете повторить процедуру оплаты. Описание процесса передачи данных Наш Интернет-Магазин не собирает и не хранит данных о банковских картах клиента. При оплате заказа с помощью пластиковой карты все данные вводятся на защищенной странице сайта банка АО «ПСКБ». Для осуществления платежа Вам потребуется сообщить данные Вашей пластиковой карты. Передача этих сведений производится с соблюдением всех необходимых мер безопасности по защищенному каналу (протокол SSL 128). Безопасность электронных платежей обеспечивается на уровне мировых стандартов, сертифицированных международными платежными системами с использованием технологий 3D-Secure: Verified by Visa и SecureCode от MasterCard. 3-D Secure используется как дополнительный уровень безопасности для онлайн-кредитных и дебетовых карт. Это достигается за счет того, что при оплате покупки по технологии 3-D Secure аутентификация владельца карты осуществляется на специальном сервере банка, выпустившего карту. Для аутентификации клиента требуется ввести пароль, известный только владельцу карты. Технология 3-D Secure поддерживается не всеми картами, что бы выяснить поддерживает ли ваша карта эти технологии защиты обратитесь в службу поддержки вашего банка. Внимание: Платежи с карт, не принадлежащих лицу, указанному в качестве плательщика в заказе, не принимаются. При оплате пластиковыми картами комиссия не взимается. Возврат платежей по кредитным картам возможен только безналичным путем на счет карты. *Гарантийный талон предоставляется в том случае, если предусмотрен для заказанного товара. </p> <div> |
Воспользуемся ajax
Отправка запроса из произвольного места в коде
1 2 3 4 5 6 7 |
js := ' function getTextHeight()' + // '{' + // 'test = document.getElementById("1234");' + // 'return test.clientHeight;' + // '}' + // 'ajaxRequest(' + HTMLFrame.JSName + ', ''HTMLFrameHeightAdjust'', [ ''param0=''+getTextHeight(), ''param1=B'' ]);'; UniSession.JSCode(js); |
и/или
Отправка запроса из ExtEvents в событии afterupdatehtml
1 2 3 4 5 6 7 8 |
function afterupdatehtml(sender, eOpts) { function TextHeight(){ test = document.getElementById("1234"); return test.clientHeight; //px height } ajaxRequest(sender, 'HTMLFrameHeightAdjust', [ 'param0='+TextHeight(), 'param1=B' ]); } |
Обработка запроса на сервере – это пример из проекта
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 |
procedure TPaymentsPageContent.HTMLFrameAjaxEvent(Sender: TComponent; EventName: string; Params: TUniStrings); var contentHeight: Integer; maxContentHeight: Integer; begin if SameText(EventName, 'HTMLFrameHeightAdjust') then begin ShowMessage('Here ' + Params.Values['param0']); //exit; HTMLFrame.Height := Params.Values['param0'].ToInteger; pContent.Height := pTop.Height + HTMLFrame.Height; Self.Height := pContent.Height; // adjusting Height if Assigned(FLeftSideBar) then begin if FOL.Count > 0 then contentHeight := pTop.Height + pContent.Height else contentHeight := pTop.Height + pContent.Height; if contentHeight >= FLeftSideBar.Height then maxContentHeight := contentHeight else maxContentHeight := FLeftSideBarHeight; Page.Height := Page.Header.Height + Page.TopMenu.Height + Page.Footer.Height + maxContentHeight + 10; end; if Assigned(FTopSideBar) then begin HTMLFrame.Height := HTMLFrame.Height + 80; pContent.Height := pTop.Height + HTMLFrame.Height; Self.Height := pContent.Height; contentHeight := Self.Height; Page.Height := Page.Header.Height + FTopSideBar.Height + Page.Footer.Height + contentHeight + 10; end; end; end; |