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

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

проблема с аттрибутом href в IE


nikkie ©   (2004-02-27 04:30:00) 

имеется html с тегом типа <a href="d:\xxx.txt">.
IE показывает ссылку (в статусбаре и свойствах) как file:///d:/xxx.txt (именно три слеша после file: обратный слеш заменен на прямой)

тем не менее при клике на ссылку навигация осуществляется нормально и в адресной строке браузера имеем d:\xxx.txt

при обращении из javascript я получаю точно такой же file:///

при обращении из программы через IHTMLAnchorElement::get_href или IHTMLElement::getAttribute я получаю точно такой же file:///

для целей редактирования ссылки мне надо в программе получить ссылку в нормальном виде d:\xxx.txt

нет ли идей, как получить "правильное" значение href?


nikkie   (2004-02-27 15:27:00) [1]

>что write возвращает не то, что было передано.
сорри, следует читать как
что read возвращает не то, что было передано.

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

идея 1. воспользоваться IDocHostUIHandler::TranslateUrl? кажется, он вызывается только при загрузке страницы, не подходит...
идея 2. воспользоваться IURLSearchHook::Translate? не нравится, что надо глобально регистрировать. опять же нет уверенности, что будет работать.
идея 3. поставить какой-нибудь Asynchronous Pluggable Protocol, MIME-фильтр или NameSpace handler? получится ли ловить этот url где-нибудь в IInternetProtocolInfo::ParseUrl?
идея 4. а каким образом осуществляется это дурацкое преобразование url? какие-нибудь moniker API? нет ли возможности сделать обратное преобразование? или перехватить вызов этого API в моем процессе?


nikkie   (2004-02-27 12:45:00) [2]

не хотелось бы...

на самом деле это не единственная проблема. в целом проблема в том, что если не указан явно протокол, то MSHTML пытается во-первых его угадать, во-вторых превратить relative пути в absolute.

например, если страница создана программно (адрес страницы about:blank), то ссылка типа href="ddd" превращается в "about:blankddd".

если загружена страница d:\text.htm, то ссылка href="www.ya.ru" превращается в "file:///D:/www.ya.ru"

от этой проблемы вроде бы помогает тег
<head><base href=""></base></head>
(благо в моей ситуации код страницы создаю я сам)

но где гарантия того, что я не пропустил еще какой-то хитрой обработки, которую производит IE над href? я ведь хочу простейшей вещи: то, что вколотил юзер, что я передал в put_href, что записалось в html - я хочу получить это обратно. убил бы тех, кто делает read-write свойство таким образом, что write возвращает не то, что было передано.

а пока мои мучения вот такие:
<html>
<head><base href=""></base></head>
<script language="JavaScript">
function real(anchor)
{
return (anchor.pathname+anchor.search)
}

function test()
{
 t1.value =
           a0.href+"\n"+
           a1.href+"\n"+
           a2.href+"\n"+
           a3.href+"\n"+
           a4.href+"\n"+
           a5.href+"\n";

 t2.value =
        real(a0)+"\n"+
        real(a1)+"\n"+
        real(a2)+"\n"+
        real(a3)+"\n"+
        real(a4)+"\n"+
        real(a5)+"\n";
}
</script>
<body onload=test()>

<a id="a0" href="www.ya.ru">aaaa</a>
<a id="a1" href="www.ya.ru:80">aaaa</a>
<a id="a2" href=" http://www.ya.ru:80">aaaa</a>
<a id="a3" href="xxx.txt?aaa">aaaa</a>
<a id="a4" href="D:\xxx.txt?bbb">aaaa</a>
<a id="a5" href="file://D:\xxx.txt">aaaa</a>
<br>
<textarea id="t1" rows=10 cols=40></textarea>
<textarea id="t2" rows=10 cols=40></textarea>

</body></html>


VMcL   (2004-02-27 11:37:00) [3]

>>nikkie ©  (27.02.04 04:30)

Наверное, придется:
if Pos('file:///', S) = 1 then Delete(S, 1, Length('file:///'));
+
StringReplace(S, '/', '\', ...)


Наверх

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