Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1246191388
Дмитрий С
2009-06-28 16:16
2009.08.30
Bluetooth пульт с экраном.


2-1246437194
abhtr
2009-07-01 12:33
2009.08.30
Как программно нажать клавиши Alt+стрелка вниз


2-1246015956
wordmen
2009-06-26 15:32
2009.08.30
нужно сгенерить дату следующего дня и определенное время


4-1216039147
Gec
2008-07-14 16:39
2009.08.30
Получить Canvas фомы


2-1246604370
Neket
2009-07-03 10:59
2009.08.30
Как узнать колличество записей в DBGrid?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский