Главная страница
    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.46 MB
Время: 0.033 c
1-1081345478
ЧупаЧупс
2004-04-07 17:44
2004.04.25
Буфер обмена


1-1081685178
Феликс
2004-04-11 16:06
2004.04.25
Вопрос с картинкой про траекторию.


6-1077391264
Гиричев Руслан
2004-02-21 22:21
2004.04.25
Отправка почты


14-1080937601
Knight
2004-04-03 00:26
2004.04.25
А можно из самой программы узнать сколько памяти она занимает?


6-1076676539
Скив
2004-02-13 15:48
2004.04.25
Два вопроса. Загрузка рисунков и mshtml.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский