![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Переход по ссылке в 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 строке