Форум: "Начинающим";
Текущий архив: 2009.08.30;
Скачать: [xml.tar.bz2];
ВнизПереход по ссылке в WebBrowser e Найти похожие ветки
← →
Alexei © (2009-06-27 23:35) [0]Здравствуйте, мастера Delphi! Пишу программу, в которой WebBrowser отображает страницы, исходные html-коды которых «загружается» в WebBrowser из компонента Memo. При клике по ссылке на другой раздел одной и той же страницы (html-документа), загруженной из Мемо, в WebBrowser’e появляется текст «blank#Zakladka», где Zakladka – имя закладки на другой раздел. В IE и Firefox всё корректно работает (если открывать html-файл с этим кодом). В чём может быть проблема моей программы?
← →
Palladin © (2009-06-29 17:04) [1]Ошибка в 17 строке
← →
brother © (2009-06-30 11:34) [2]> исходные html-коды которых «загружается» в WebBrowser из
> компонента Memo
ндя...
> в WebBrowser’e появляется текст «blank#Zakladka»,
это называется линк...
ты не сказал, что происходит если нажать на линк в твоей проге.
← →
sniknik © (2009-06-30 12:04) [3]> ты не сказал, что происходит если нажать на линк в твоей проге.
переход на "якорь" в той же странице. вернее "непереход" в программе(WebBrowser), и нормальный переход если html открыт файлом в браузере.
все же ясно описано. и ответ в [1] на 100% верен...
← →
brother © (2009-07-01 09:11) [4]ах, это якорь...
← →
Alexei © (2009-07-01 19:47) [5]Уточню свой вопрос. WebBrowser в моей программе работает не с файлами: html загружается из DBMemo (из БД). => WebBrowser’у неизвестны URL’ы загружаемых страниц. Отсюда и – «blank#Zakladka» (URL=’about:blank#Zakladka’). Если работать с файлами, в моей проге всё нормально работает – проверил! Но это не то, что мне надо.
В общем, задача сводится к следующему. В html-коде есть ссылка <a href=”#Yakor”>Link</a> на якорь <a name=”Yakor”>Другой раздел</a>. В обработчике события WebBrowserBeforeNavigate2 определяем строку якоря. Вопрос в том, как прокрутить WebBrowser до нужного якоря (до определенной строки html-кода)?
← →
TIF © (2009-07-02 00:36) [6]> как прокрутить WebBrowser до нужного якоря (до определенной
> строки html-кода)
ВебБраузер САМ прокрутит страницу до "якоря" при переходе (навигации) по правильной ссылке. Если программисту и остаётся что-то в этом случае крутить, то только пальцем у виска )))))
Вывод: нужна правильная ссылка
Берём лопату, роем дальше
> Пишу программу, в которой WebBrowser отображает страницы,
> исходные html-коды которых «загружается» в WebBrowser из
> компонента Memo
Ужас какой
Исходный код страниц, то есть сам html-документ изначально нужно сохранять в файл (временный), тогда проблема решена - мы загружаем файл с диска, компонент-браузер сам прокручивает его до нужного якоря
Ы?
← →
Германн © (2009-07-02 00:54) [7]
> Исходный код страниц, то есть сам html-документ изначально
> нужно сохранять в файл (временный), тогда проблема решена
> - мы загружаем файл с диска, компонент-браузер сам прокручивает
> его до нужного якоря
Не спец в данном компоненте. Но какая разница откуда брать текст (набор печатных символов)? Из файла или из мемо какая разница?
← →
TIF © (2009-07-02 01:13) [8]> Из файла или из мемо какая разница?
разница именно в навигации...
Сейчас проверил загрузку из 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>
← →
TIF © (2009-07-02 01:38) [9]Так. Проверил ещё и TWebBrowser.
Разобрался и убедился, что правильное решение - загрузка из файла :)
Во-первых, поправлю себя:
> EmbeddedWB1.Navigate("#Yakor");
логичнее всё-таки заменить на
WebBrowser1.Navigate(WebBrowser1.LocationURL+"#Yakor");
LocationURL - URL текущей (загруженной) страницы
Во-вторых,
> Ещё интереснее - открывается пустой документ
Если перед этим нажать F5 и нажать на ссылку - произойдёт переход на якорь, без выкидывания на пустую страницу
В-третьих, ближе к делу :)
Для страницы, загруженной "из кода" (из Memo) навигация по документу не работает. Проблема в том, что у страница получается без своего LocationURL, он оказывается равным about:blank или чему-то там ещё
Для страницы, загруженной из файла всё работает без проблем, так как для неё LocationURL - это путь к htm-файлу на диске
Фух. Теперь вроде всё :-0
PS: если кто-то выложит работающую навигацию по якорям для загруженного из memo html-документа - буду признателен, но я почти уверен, что её не существует в природе
← →
int64 (2009-07-02 19:01) [10]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-03 10:52) [11]> HTMLAnchorElement(iDoc.anchors.item("PageTop", EmptyParam)).
> scrollIntoView(0);
Скроллинг - это вещь, но не представляю, как автор будет вычислять до какого места крутить, чтобы попасть точно "в якорь" )
← →
int64 (2009-07-03 15:44) [12]"PageTop" - это название якоря
← →
MonoLife © (2009-07-03 16:28) [13]
> Проблема в том, что у страница получается без своего LocationURL,
> он оказывается равным about:blank или чему-то там ещё
Как вариант, сохранить из мемо временный htm файл и затем открыть его. Нет?
← →
TIF © (2009-07-04 00:36) [14]MonoLife © (03.07.09 16:28) [13]
> Как вариант, сохранить из мемо временный htm файл и затем
> открыть его. Нет?
Народ, вы хоть читаете предыдущие сообщения? :)
А я что тут уже который день доказываю и предлагаю? )))))
TIF © (02.07.09 00:36) [6]
> Исходный код страниц, то есть сам html-документ изначально
> нужно сохранять в файл (временный), тогда проблема решена
> - мы загружаем файл с диска, компонент-браузер сам прокручивает
> его до нужного якоря
imho,вопрос уже исчерпан. Можно даже тему закрывать
← →
MonoLife © (2009-07-04 06:35) [15]
> TIF © (04.07.09 00:36) [14]
сорри, смутили вот эти слова, что я даже забыл про [6]
> ...что её не существует в природе
>
← →
MonoLife © (2009-07-04 07:01) [16]Вспоминал как я делал когда-то..
Оказывается в процессе записи кода HTML присваивал не якоря, а
<id ="anchor1">. Затем "находил" в документе элемент (GetElementById) и "делал" скроллинг (scrollIntoView) к этому id..
Так что, это не совсем то...
← →
Alexei © (2009-07-04 15:32) [17]Спасибо, 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.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.08.30;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.018 c