• 0
Авторизация  
hippocamus

Перейти на якорь уже загруженной страницы

Вопросы

Есть динамически создаваемая страница, на ней размечены опорные точки <a name="zXXX"></a>
  WebBrowser1.LoadFromStrings(GenerateHtml, '');
Есть TreeView, нажатие на пункты которого должно скроллить браузер к этим якорям.

Вот так: не получается...

  WebBrowser1.Navigate('#z10');

Как это можно сделать? Может, есть какое-то внутреннее имя у страницы, чтобы указать в Navigate?
В LoadFromStrings в качестве 2-го параметра задавал имя, допустим 'test', в Navigate указывал 'test#z10' - не работает.
Подскажите кто знает...

 

Изменено пользователем hippocamus

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

7 ответов на этот вопрос

  • 0

Хм, что-то получилось.

Вот таким костылём, но меня вполне устраивает:

  WebBrowser1.EvaluateJavaScript('document.location.href=''#z10'';');

Только одно "но" - браузер не обновляется автоматически, только когда начнёшь скроллить происходит реальное отображение новой позиции.

WebBrowser.Repaint и   Application.ProcessMessages не дают нужного эффекта.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
2 часа назад, hippocamus сказал:

WebBrowser.Repaint

Обработка ява-скрипт команды занимает некоторое время и происходит асинхронно. Поэтому если сразу сделать репаинт - ничего не изменится.

P.S. Что за ОС? Как ведёт себя браузер от TMS? Вообще если статический html и якоря, то на дельфе лучше richedit какой-нибудь сторонний использовать... Ну это так, к слову.
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
24 минуты назад, Akad сказал:

Обработка ява-скрипт команды занимает некоторое время и происходит асинхронно. Поэтому если сразу сделать репаинт - ничего не изменится.

P.S. Что за ОС? Как ведёт себя браузер от TMS? Вообще если статический html и якоря, то на дельфе лучше richedit какой-нибудь сторонний использовать... Ну это так, к слову.
 

Windows 7x64 (но собирал под x32). А так прога с прицелом и на Android тоже.
TMS браузер не пробовал, в чём собственно его преимущество?
RichEdit от TMS пробовал - очень сильно медленно работает, а у меня около 700k чистого текста. И кроме того - в html легко сделать мягкие переносы, выравнивание по обоим краям, колонки через табличную вёрстку и подгонка высоты и ширины колонок через встроенный javascript - так что richedit-ы для меня использовать не вариант.
А браузер не перерисовывается не потому, что команда не успевает сработать, а не обновляется вообще, и через минуту, если не дёрнешь. Так вот - как можно программно это "дёрганье" сэмулировать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
3 часа назад, hippocamus сказал:

TMS браузер не пробовал, в чём собственно его преимущество?

Как бы это по мягче сказать.... он (почти) работает. На андроиде работает (хоть как-то) только он, на винде глюков в несколько раз меньше стокового.

3 часа назад, hippocamus сказал:


RichEdit от TMS пробовал - очень сильно медленно работает, а у меня около 700k чистого текста.

Я про российский компонент. TRichView. Даже бэкап сайта на его основе делал. Честно скажу - 700к в него не пихал, но порядка 80-100к - живал без проблем.




 

Изменено пользователем Akad

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
В 24.04.2018 в 01:09, Akad сказал:

Как ведёт себя браузер от TMS?

Так же точно. Единственно - на него всё-таки устанавливается фокус при старте программы. Программно же установить тоже невозможно. Также не даёт поверх себя MultiView рисовать и не обновляется по Repaint.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Если кто-то ищет ответ на данный вопрос под Android, то я всегда использовал такое решение (С++):

WebBrowser1->EvaluateJavaScript("window.location.assign(\"#"+ yakor +"\")");

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу