Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Переход по ссылке в WebBrowser'e [D6, WinXP]


Alexei ©   (2009-06-27 23:35:00) 

Здравствуйте, мастера Delphi! Пишу программу, в которой WebBrowser отображает страницы, исходные html-коды которых «загружается» в WebBrowser из компонента Memo. При клике по ссылке на другой раздел одной и той же страницы (html-документа), загруженной из Мемо, в WebBrowser’e появляется текст «blank#Zakladka», где Zakladka – имя закладки на другой раздел. В IE и Firefox всё корректно работает (если открывать html-файл с этим кодом). В чём может быть проблема моей программы?


Alexei   (2009-07-04 15:32:00) [1]

Спасибо, int64!!! Всё работает!!! И никаких временных файлов не надо!!!
У меня ещё один вопрос на эту тему. Как осуществить переход в обратном направлении, т.е. как перейти к ссылке <a href=”#Yakor”>Link</a>, если переход к якорю произошёл и, соответственно, нам известен URL=’#Yakor’?
Проверял
iDoc:=IHTMLDocument2(WebBrowser1.Document);
HTMLLinkElement(iDoc.links.item(link_URL, EmptyParam)).scrollIntoView(1);
//LinkURL – URL ссылки (’#Yakor’).

Но появляется ошибка 'Access violation at address …’.

Может дело в параметрах index (второй параметр функции item) и / или varargStart (параметр процедуры scrollIntoView)?

Кстати, при переходе к якорю я использую параметр varargStart=1. При этом якорь отображается возле верхнего края WB. Если varargStart=0, якорь отображается возле нижнего края WB.


MonoLife   (2009-07-04 07:01:00) [2]

Вспоминал как я делал когда-то..
Оказывается в процессе записи кода HTML присваивал не якоря, а
<id ="anchor1">. Затем "находил" в документе элемент (GetElementById) и "делал" скроллинг (scrollIntoView) к этому id..
Так что, это не совсем то...


MonoLife   (2009-07-04 06:35:00) [3]


> TIF ©   (04.07.09 00:36) [14]

сорри, смутили вот эти слова, что я даже забыл про [6]

> ...что её не существует в природе
>


TIF   (2009-07-04 00:36:00) [4]

MonoLife ©   (03.07.09 16:28) [13]
> Как вариант, сохранить из мемо временный htm файл и затем
> открыть его. Нет?

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

TIF ©   (02.07.09 00:36) [6]
> Исходный код страниц, то есть сам html-документ изначально
> нужно сохранять в файл (временный), тогда проблема решена
> - мы загружаем файл с диска, компонент-браузер сам прокручивает
> его до нужного якоря


imho,вопрос уже исчерпан. Можно даже тему закрывать


MonoLife   (2009-07-03 16:28:00) [5]


> Проблема в том, что у страница получается без своего LocationURL,
>  он оказывается равным about:blank или чему-то там ещё

Как вариант, сохранить из мемо временный htm файл и затем открыть его. Нет?


int64   (2009-07-03 15:44:00) [6]

'PageTop' - это название якоря


TIF   (2009-07-03 10:52:00) [7]

> HTMLAnchorElement(iDoc.anchors.item('PageTop', EmptyParam)).
> scrollIntoView(0);

Скроллинг - это вещь, но не представляю, как автор будет вычислять до какого места крутить, чтобы попасть точно "в якорь" )


int64   (2009-07-02 19:01:00) [8]

procedure TForm1.Button1Click(Sender: TObject);
begin
 WebBrowser1.Navigate('delphimaster.ru');
end;

procedure TForm1.Button2Click(Sender: TObject);
var
 iDoc: IHTMLDocument2;
begin
 iDoc := IHTMLDocument2(WebBrowser1.Document);
 HTMLAnchorElement(iDoc.anchors.item('PageTop', EmptyParam)).scrollIntoView(0);
end;


TIF   (2009-07-02 01:38:00) [9]

Так. Проверил ещё и TWebBrowser.
Разобрался и убедился, что правильное решение - загрузка из файла :)

Во-первых, поправлю себя:
> EmbeddedWB1.Navigate('#Yakor');
логичнее всё-таки заменить на
WebBrowser1.Navigate( WebBrowser1.LocationURL+'#Yakor');
LocationURL - URL текущей (загруженной) страницы

Во-вторых,
> Ещё интереснее - открывается пустой документ
Если перед этим нажать F5 и нажать на ссылку - произойдёт переход на якорь, без выкидывания на пустую страницу

В-третьих, ближе к делу :)

Для страницы, загруженной "из кода" (из Memo) навигация по документу не работает.Проблема в том, что у страница получается без своего LocationURL, он оказывается равным about:blank или чему-то там ещё
Для страницы, загруженной из файла всё работает без проблем, так как для неё LocationURL - это путь к htm-файлу на диске

Фух. Теперь вроде всё :-0
PS: если кто-то выложит работающую навигацию по якорям для загруженного из memo html-документа - буду признателен, но я почти уверен, что её не существует в природе


TIF   (2009-07-02 01:13:00) [10]

> Из файла или из мемо какая разница?

разница именно в навигации...

Сейчас проверил загрузку из memo, правда в TEmbeddedWB, а не стандартный компонент, но разницы вроде особой нет

Вот такой документик
<a href="#Yakor">1</a></p>
<p>2</p>
<p>3</p>
...
<p>9</p>
<p><a name="Yakor">10</a></p>
<p>11</p>
...
<p>20</p>


Загрузили, выполняем EmbeddedWB1.Navigate('#Yakor'); (теоретически должно работать, т.к. адрес текущей страницы вообще существует ли, если она из мемо создана?)
Никакой реакции. Жмём тогда на первую ссылку. Ещё интереснее - открывается пустой документ (хм, может это от IE8 такие фокусы?), в исходном коде которого только <HTML></HTML>


Германн   (2009-07-02 00:54:00) [11]


> Исходный код страниц, то есть сам html-документ изначально
> нужно сохранять в файл (временный), тогда проблема решена
> - мы загружаем файл с диска, компонент-браузер сам прокручивает
> его до нужного якоря

Не спец в данном компоненте. Но какая разница откуда брать текст (набор печатных символов)? Из файла или из мемо какая разница?


TIF   (2009-07-02 00:36:00) [12]

> как прокрутить WebBrowser до нужного якоря (до определенной
> строки html-кода)

ВебБраузер САМ прокрутит страницу до "якоря" при переходе (навигации) по правильнойссылке. Если программисту и остаётся что-то в этом случае крутить, то только пальцем у виска )))))

Вывод: нужна правильная ссылка

Берём лопату, роем дальше

> Пишу программу, в которой WebBrowser отображает страницы,
>  исходные html-коды которых «загружается» в WebBrowser из
> компонента Memo

Ужас какой

Исходный код страниц, то есть сам html-документ изначально нужно сохранять в файл (временный), тогда проблема решена - мы загружаем файл с диска, компонент-браузер сам прокручивает его до нужного якоря

Ы?


Alexei   (2009-07-01 19:47:00) [13]

Уточню свой вопрос. WebBrowser в моей программе работает не с файлами: html загружается из DBMemo (из БД). => WebBrowser’у неизвестны URL’ы загружаемых страниц. Отсюда и – «blank#Zakladka» (URL=’about:blank#Zakladka’). Если работать с файлами, в моей проге всё нормально работает – проверил! Но это не то, что мне надо.

В общем, задача сводится к следующему. В html-коде есть ссылка <a href=”#Yakor”>Link</a> на якорь <a name=”Yakor”>Другой раздел</a>. В обработчике события WebBrowserBeforeNavigate2 определяем строку якоря. Вопрос в том, как прокрутить WebBrowser до нужного якоря (до определенной строки html-кода)?


brother   (2009-07-01 09:11:00) [14]

ах, это якорь...


sniknik   (2009-06-30 12:04:00) [15]

> ты не сказал, что происходит если нажать на линк в твоей проге.
переход на "якорь" в той же странице. вернее "непереход" в программе(WebBrowser), и нормальный переход если html открыт файлом в браузере.

все же ясно описано. и ответ в [1] на 100% верен...


brother   (2009-06-30 11:34:00) [16]

> исходные html-коды которых «загружается» в WebBrowser из
> компонента Memo

ндя...

> в WebBrowser’e появляется текст «blank#Zakladka»,

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


Palladin   (2009-06-29 17:04:00) [17]

Ошибка в 17 строке


Наверх

Титульная страница Поиск, карта сайта Написать письмо