Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / IE innerHTML - проблемы с записью значения script / 9 сообщений из 9, страница 1 из 1
22.12.2009, 23:58
    #36381093
dima.taburetkin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IE innerHTML - проблемы с записью значения script
суть проблемы: при попытке засунуть в айфрейм значение начинающееся со "<script>"
скрипт вырезается как и не было. уже устал искать почему.
в мозиле подобная проблема не наблюдается.

вот небольшой пример:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
<html>
<head></head>
<body>
<iframe name="if" id="if"></iframe><hr>
<textarea id="ta" name="ta"><script>var ogogo= 1 ;</script>some text</textarea><br>
<input type="button" value="chpok" onclick="javascript:do_evil();">
<script>
function do_evil(){
	var o_if = window.frames['if'];
	var o_ta = document.getElementById('ta');
	
	o_if.document.body.innerHTML = o_ta.value;
	alert(o_if.document.body.innerHTML);
	alert(o_if.document.documentElement.innerHTML);
	
	o_if.document.write(o_ta.value);
	alert(o_if.document.body.innerHTML);
	alert(o_if.document.documentElement.innerHTML);

}
</script>
</body>
</html>

использую два способа.
1) innerHTML - тут глухо. скрипт просто вырезается как и не было.
2) метод write, тут уже лучше. скрипт при первом проходе попадает в хед.
теоритически можно вырезать тег хед через removechild но в ие это можно сделать всего 1 раз. на второй раз ие валится с ошибкой "неизвестная ошибка"

хохмма в том, что если перед <script> написать что-нибудь (например пару буковок) то он прекрасно вставится и через innerHTML и как угодно.
и задача в данном случае не потерять теги при переносе значений туда и обратно из айфрейма в текстарею и наоборот и не назасовывать лищнего(поэтому не устраивает вариант со вставкой буковок или нбсп).
причем насколько мне известно <script> не единственный тег который ведет себя подобным образом.

пробовал сувать ради интереса в див. там тоже скрипт вырезается.

вобщемто если ткнете носом где почитать как бороться с этой проблемой и почему так происходит, буду признателен.

зыж
а если в innerHTML засунуть '<p><hr></p>' то тоже ошибка получится.
...
Рейтинг: 0 / 0
23.12.2009, 00:35
    #36381112
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IE innerHTML - проблемы с записью значения script
Конечно же в первоисточнике
MSDNWhen using innerHTML to insert script, you must include the DEFER attribute in the script element.

С уважением, Vasilisk
...
Рейтинг: 0 / 0
23.12.2009, 10:03
    #36381425
ShSerge
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IE innerHTML - проблемы с записью значения script
_Vasilisk_Конечно же в первоисточнике
MSDNWhen using innerHTML to insert script, you must include the DEFER attribute in the script element.

С уважением, Vasilisk
А там примерчик ИЕ онли, так что разрулить это дело потребуется.
...
Рейтинг: 0 / 0
23.12.2009, 11:06
    #36381588
dima.taburetkin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IE innerHTML - проблемы с записью значения script
_Vasilisk_, к сожалению DEFER никак не решает проблему.
если innerHTML пустой то при присвоении в него '<script DEFER>блаблабла</script> всякое разное'
для дива и айфрейма <script DEFER>блаблабла</script> будет нещадно вырезан и там останется только ' всякое разное'

при использовании метода write для айфрейма в первую итерацию в body будет записано ' всякое разное' и в head будет записан <script>блаблабла</script>

на второй итерации <script>блаблабла</script> будет записан уже в body независимо от того пустой body или нет приэтом он естественно будет еще и в head

для решения моей задачи подойдет такой метод:
Код: plaintext
1.
2.
3.
4.
	o_if.document.body.innerHTML='';
	o_if.document.write(o_ta.value);
	o_if.document.body.innerHTML='';
	o_if.document.write(o_ta.value);

после этой операции <script DEFER>блаблабла</script> будет как в хеад так и в боди.
но мне не нравится в этом то, что происходит две записи вместо одной. чисто эстетически.
ну и конечно огорчает, что я не понимаю почему так происходит.
и еще один момент.
сейчас запись в div.innerHTML меня не заботит, меня волнует именно iframe, но вот что делать если все ж придется с дивом проделывать тоже самое?

короче говоря - печаль :(
...
Рейтинг: 0 / 0
23.12.2009, 16:04
    #36382574
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IE innerHTML - проблемы с записью значения script
Я так понял, что Вы во второй части марлезонского балета планируете дернуть то, что внутри <script>? Если да - то одним innerHTML не обойдетесь.
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
23.12.2009, 23:58
    #36383424
dima.taburetkin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IE innerHTML - проблемы с записью значения script
Ex_Soft
Я так понял, что Вы во второй части марлезонского балета планируете дернуть то, что внутри <script>? Если да - то одним innerHTML не обойдетесь.
_________________
"Helo, word!" - 17 errors 56 warnings


Да нет. выполнять не придется.
я вообще столкнулся с этой проблемой отлаживая какой-то ричтекстэдитор заточенный на ие.
просто случайно заметил, что теряются скрипты при переключении между текстареей и айфреймом.
ну и в связи с этим стал копаться как сделать так штоп не срезались.

больше всего удивило то, что не смог сходу нагуглить ответ. такое ощущение что эта проблема у меня у первого, а в это не верится.
...
Рейтинг: 0 / 0
24.12.2009, 01:28
    #36383472
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IE innerHTML - проблемы с записью значения script
dima.taburetkin_Vasilisk_, к сожалению DEFER никак не решает проблему.
если innerHTML пустой то при присвоении в него '<script DEFER>блаблабла</script> всякое разное'
для дива и айфрейма <script DEFER>блаблабла</script> будет нещадно вырезан и там останется только ' всякое разное'Вы ссылку читали? Как там сказано сделали?

Ладно, даю подсказку
Код: plaintext
innerHTML = "<div style='display:none'>dummy</div><script defer='defer'>.....";
...
Рейтинг: 0 / 0
24.12.2009, 09:53
    #36383745
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IE innerHTML - проблемы с записью значения script
Для случая <script></script> only
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
<html>
	<head>
		<title>Main Form</title>
		<script type="text/javascript">
<!--
function DoIt()
{
	var
		frm,
		Ctrl,
		s="\n<!--\nvar\n\tTestVar=99;\n\nfunction Test()\n{\n\talert('Test ('+TestVar+')');\n}\n// -->\n";

	if(!(frm=document.getElementById("IFrame1"))
		|| !(Ctrl=frm.contentWindow.document.createElement("script")))
		return;

	Ctrl.text=s;
	frm.contentWindow.document.body.appendChild(Ctrl);
}

function CallTest()
{
	var
		frm;

	if(!(frm=document.getElementById("IFrame1")))
		return;

	frm.contentWindow.Test();
}
// -->
		</script>
	</head>
	<body>
		<iframe id="IFrame1" src="iframe1.html"></iframe><br>
		<input type="button" value="DoIt!" onclick="DoIt()">
		<input type="button" value="call Test" onclick="CallTest()">
	</body>
</html>
Mozilla Firefox 3.5.6, M$ IE 6.0.2900.2180.xpsp_sp2_rtm040803-2158
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
24.12.2009, 16:41
    #36384992
dima.taburetkin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IE innerHTML - проблемы с записью значения script
_Vasilisk_dima.taburetkin_Vasilisk_, к сожалению DEFER никак не решает проблему.
если innerHTML пустой то при присвоении в него '<script DEFER>блаблабла</script> всякое разное'
для дива и айфрейма <script DEFER>блаблабла</script> будет нещадно вырезан и там останется только ' всякое разное'Вы ссылку читали? Как там сказано сделали?

Ладно, даю подсказку
Код: plaintext
innerHTML = "<div style='display:none'>dummy</div><script defer='defer'>.....";


ой, ссылку? ннннет, не обратил внимания
а как там сказано?
...
Рейтинг: 0 / 0
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / IE innerHTML - проблемы с записью значения script / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]