Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.25;
Скачать: CL | DM;

Вниз

проблема с аттрибутом href в IE   Найти похожие ветки 

 
nikkie ©   (2004-02-27 04:30) [0]

имеется 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?


 
VMcL ©   (2004-02-27 11:37) [1]

>>nikkie ©  (27.02.04 04:30)

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


 
nikkie ©   (2004-02-27 12:45) [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>


 
nikkie ©   (2004-02-27 15:27) [3]

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

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

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



Страницы: 1 вся ветка

Текущий архив: 2004.04.25;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.036 c
1-1080740114
TankMan
2004-03-31 17:35
2004.04.25
Какое сообщение приходит при прокручивании скрола в ListBox?


1-1081593692
Zeratul
2004-04-10 14:41
2004.04.25
Переопределение функция WMNCHitTest.


3-1080536840
Olegka
2004-03-29 09:07
2004.04.25
надо в инсталл проги вставить инсталл Firebird.


14-1080742976
Nick-from
2004-03-31 18:22
2004.04.25
Dll


1-1081429735
}|{yk
2004-04-08 17:08
2004.04.25
Плагины - изучение