Javascript-форум (https://javascript.ru/forum/)
-   Internet Explorer (https://javascript.ru/forum/css-html-internet-explorer/)
-   -   Почему рушится ИЕ (задачка на подумать) (https://javascript.ru/forum/css-html-internet-explorer/3883-pochemu-rushitsya-ie-zadachka-na-podumat.html)

Kolyaj 02.06.2009 14:16

Почему рушится ИЕ (задачка на подумать)
 
Решил вынести отсюда в отдельную тему задачку, которая в свое время выносила мне мозг.

Попробуйте открыть в ИЕ следующую страничку
<html>
<head>
    <base href="/" />
    <script type="text/javascript">
        var head=document.documentElement.firstChild; // Есть и другие варианты получить head. Кому как удобнее.
        var js=document.createElement('script');
        js.type='text/javascript';
        js.src='script.js';
        head.appendChild(js);
    </script>
</head>
<body>
</body>
</html>


Небольшие хинты, которые сэкономят время в случае заинтересованности:
1. Если ИЕ уже порушился, то обновлять страницу бесполезно, даже если она была изменена. Нужно перезагружать ИЕ.
2. Чтобы избавится от пункта 1, можно открывать проблемную страницу в iframe.

И еще один хинт: проблема тут на стыке сразу двух багов.

Если кто-то видел, как я это уже описывал, просьба попридержать :)

x-yuri 02.06.2009 14:30

ты забыл указать, что ie6 рушится? А ie7, кстати, просто не подгружает (запускает) script.js

p.s. прикрепи, плз, исходники ie6, без них тяжело как-то думается :yes:

B~Vladi 02.06.2009 14:40

После прописывания
<base href="/" />
IE6 Перестал находить файл, указанный в адресной строке (Internet Explorer cannot open the Internet Site [url]), а не файл подключаемого скрипта. Появилось предположение, что в аттрибуте href нежно указывать полный путь к html документу(http://domain.zon/doc.html). После этого скрипт стал загружаться, но ИЕ всё равно падал(!). Судя по сообщению (Internet Explorer cannot open the Internet Site [url]) это действительно баг ИЕ, т.к. html-то мы открыли(скрипт подключился), а в сообщении пишет совсем другое.

B~Vladi 02.06.2009 14:42

Если же мы перенесём наш скрипт в body, баг пропадает...

Kolyaj 02.06.2009 14:46

Чтобы не смущало отсутствие подключаемого скрипта, можно так
<html>
<head>
    <base href="/" />
    <script type="text/javascript">
        var head=document.documentElement.firstChild;
        var js=document.createElement('script');
        js.type='text/javascript';
        js.src='http://javascript.ru/forum/images/ca_serenity/misc/scripts.js';
        head.appendChild(js);
    </script>
</head>
<body>
</body>
</html>

Kolyaj 02.06.2009 14:47

Цитата:

Сообщение от B~Vladi
Если же мы перенесём наш скрипт в body, баг пропадает...

Вопрос не в том, как решить проблему научным тыком, а почему рушится ИЕ6. Чтобы знать и в будущем не натыкаться.

Цитата:

Сообщение от x-yuri
ты забыл указать, что ie6 рушится?

Да, проблема в ИЕ6.

B~Vladi 02.06.2009 14:48

Цитата:

Сообщение от x-yuri
ты забыл указать, что ie6 рушится? А ie7, кстати, просто не подгружает (запускает) script.js

Да это я тоже заметил. Но если мы в base или ссылке на скрипт пишем полный путь к html, то всё гуд. Думаю, это говорит нам о том, что base нужен для указания того. откуда брать док-ты, когда ие встречает относительную ссылку, поэтому href в base обязан иметь базовый урл, а не относительный, вроде "/".

Kolyaj 02.06.2009 14:50

Цитата:

Сообщение от B~Vladi
Но если мы в base или ссылке на скрипт пишем полный путь к html, то всё гуд.

Не надо писать не подтвержденных предположений.
<html>
<head>
    <base href="http://www.yandex.ru/" />
    <script type="text/javascript">
        var head=document.documentElement.firstChild;
        var js=document.createElement('script');
        js.type='text/javascript';
        js.src='http://javascript.ru/forum/images/ca_serenity/misc/scripts.js';
        head.appendChild(js);
    </script>
</head>
<body>
</body>
</html>
Рушится.

B~Vladi 02.06.2009 14:51

Цитата:

Сообщение от Kolyaj
Вопрос не в том, как решить проблему научным тыком, а почему рушится ИЕ6. Чтобы знать и в будущем не натыкаться.

Это не тык, а простосто наблюдение.

B~Vladi 02.06.2009 14:53

Цитата:

Сообщение от Kolyaj
Не надо писать не подтвержденных предположений.

Это проверенно! Чё из мя дурака делать?!

http://www.yandex.ru/ и http://javascript.ru/... Найди 10 отличий называется...

Вот мой html, при котором ие7 грузит скрипт

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"><html>
<head>
	<base href="http://cs/test/test.html" />
    <script type="text/javascript">
        var head=document.documentElement.firstChild;
        var js=document.createElement('script');
        js.type='text/javascript';
        js.src='script.js';
        head.appendChild(js);
    </script>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head>
<body>
test
</body>
</html>

Домены должны совпадать, как ты считаешь?


Часовой пояс GMT +3, время: 01:56.