Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];

Вниз

проблема с аттрибутом 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.029 c
3-1080619876
_SCORP_
2004-03-30 08:11
2004.04.25
Глюк с записью в таблицу!


11-1063904334
Boguslaw
2003-09-18 20:58
2004.04.25
What about English forum ?


1-1081521674
denis_group
2004-04-09 18:41
2004.04.25
Проблема с определением HDD (GetDriveType)


4-1077361547
Gas
2004-02-21 14:05
2004.04.25
Как определить, "занято" ли окно/приложение?


3-1080217013
Walter
2004-03-25 15:16
2004.04.25
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский