Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.12.2015, 16:11   #1
nibufep
Форумчанин
 
Регистрация: 02.08.2014
Сообщений: 476
По умолчанию Прокрутить WebBrowser до определенного блока

Добрый день!
Как прокрутить страницу до определенного div блока?
Например до этого:
Код:
<div class="story">
nibufep вне форума Ответить с цитированием
Старый 17.12.2015, 22:16   #2
IvaniuS
Форумчанин
 
Аватар для IvaniuS
 
Регистрация: 16.04.2007
Сообщений: 225
По умолчанию

пользуюсь Selenium для управлением браузеров, просто и удобно и в виде OLE\COM.
(http://florentbr.github.io/SeleniumBasic/)

Последний раз редактировалось IvaniuS; 17.12.2015 в 22:19.
IvaniuS вне форума Ответить с цитированием
Старый 19.12.2015, 10:34   #3
nibufep
Форумчанин
 
Регистрация: 02.08.2014
Сообщений: 476
По умолчанию

Up !
nibufep вне форума Ответить с цитированием
Старый 19.12.2015, 11:16   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

https://www.google.com/search?q=js+scroll+to+element
https://www.google.com/search?q=delp...ser+execute+js
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 19.12.2015, 11:37   #5
nibufep
Форумчанин
 
Регистрация: 02.08.2014
Сообщений: 476
По умолчанию

Я пробовал вот так сделать:

Код:
procedure TForm1.WebBrowser1DocumentComplete(ASender: TObject; const pDisp: IDispatch; const[Ref]
URL: OleVariant);
var
  doc: IHTMLDocument2;
  term: IHTMLWindow2;
begin
  doc := WebBrowser1.Document as IHTMLDocument2;
  term := doc.parentWindow as IHTMLWindow2;
  term.execScript('location.hash = ''mklink-text''', 'javascript');
end;
Ну получаю ошибку что стек переполнен и программа завершается..
nibufep вне форума Ответить с цитированием
Старый 19.12.2015, 11:50   #6
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

А чего за const[Ref]?

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

В JS кстати любые кавычки использовать можно, так что можно и без экранирования
Код:
'something="text"'
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 19.12.2015, 12:09   #7
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,547
По умолчанию

Как вариант, добавить в HTML якорь:
Код HTML:
<a name="story"></a><div class="story">
Затем осуществить переход на якорь:
Код:
WebBrowser1.Navigate(ExtractFilePath(Application.ExeName)+'index.html#story');
Полный проект во вложении.
Вложения
Тип файла: rar WebScroll.rar (194.5 Кб, 8 просмотров)
Arigato вне форума Ответить с цитированием
Старый 19.12.2015, 12:12   #8
nibufep
Форумчанин
 
Регистрация: 02.08.2014
Сообщений: 476
По умолчанию

Сделал вот так:

Код:
procedure TForm5.WebBrowser1DocumentComplete(ASender: TObject; const pDisp: IDispatch; const[Ref]
URL: OleVariant);
var
  doc: IHTMLDocument2;
  term: IHTMLWindow2;
begin
  doc := WebBrowser1.Document as IHTMLDocument2;
  term := doc.parentWindow as IHTMLWindow2;        //
  term.execScript('var s = $("#content").position(); $(document).scrollTop(Math.round(s.top));', 'javascript');
end;
ну почему то к блоку content он скролит, а например к mklink-text нет...
nibufep вне форума Ответить с цитированием
Старый 19.12.2015, 12:15   #9
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Что за mklink-text? Может это не id? # это селектор по id. Для классов "." надо или
Код:
document.getElementsByClassName("myClass")[0]
Ну и в обычном браузере сначала попробуйте выполнить код в консоли (F12), посмотрите выдает ли ошибки.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 19.12.2015 в 12:18.
Alex11223 вне форума Ответить с цитированием
Старый 19.12.2015, 13:55   #10
nibufep
Форумчанин
 
Регистрация: 02.08.2014
Сообщений: 476
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Что за mklink-text?
Код:
<div id="mklink-text">
...
    </div>
nibufep вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Прокрутить страницу до дива sashgera JavaScript, Ajax 1 21.09.2015 04:18
Blowfish (резервирование дополнительного байта для блока, говорящий о длине блока) ITdocer Общие вопросы C/C++ 0 21.05.2014 15:40
Изменение прозрачности определенного блока gufon JavaScript, Ajax 8 05.06.2013 21:49
Прокрутить РичЕдит HellMercenaries Общие вопросы Delphi 1 21.07.2009 09:37
Как автоматически прокрутить ScroolBar в WebBrowser SeRhy Общие вопросы Delphi 3 19.08.2008 09:38