Проблемы с javascript после sp2
От: raw_loot  
Дата: 21.12.04 05:14
Оценка:
Здравствуйте, послу установки sp2 появились такие проблемы(а может были, но вылезли):
1)
function mMakeFrame(m, index){
    var newDiv=document.createElement("DIV");
        newDiv.className="menuFrame";
        newDiv.id="menu"+index;
        newDiv.innerHTML=mMakeFrameHTML(m);

    document.body.appendChild(newDiv);
}


appendChild() не выполняеться, пишет "операция прервана" и вылетает в "невозможно отобразить страницу", при чём, при показе алерта, видно созданный фрейм.

2)

function navLoaded(obj, to){
    if( (navigator.appName == "Microsoft Internet Explorer") && !(window.opera) ){
        document.getElementById(to).innerHTML=obj.contentWindow.document.body.innerHTML;
    }else{
        document.getElementById(to).innerHTML=obj.contentDocument.body.innerHTML;
    }
}

<iframe name="nav" onload="navLoaded(this, 'navigator')" class="navigatorFrame"></iframe>
<div id="navigator">
    111
</div>

При запуске, iframe не используеться и должно показываться содержание div'а, но не показываеться при чём, если перед текстом поставить <script>alert('1')</script> показываеться.

3)
В IE, если переход по iframe'у осуществляеться на не существующую страницу, то в div содержание не передаёться(В NS и Opera всё нормально), и появляеться ошибка "Отказано в доступе".

4)
В примере на http://www.cross-browser.com устанавливаеться onerror для img, для iframe поставить не получаеться.
Так <iframe id="nav" onerror="f()"> у меня не получаеться, а через getElementById он почему-то его не находит.

PS: какойто alert стал волшебный
.
Re: Проблемы с javascript после sp2
От: raw_loot  
Дата: 21.12.04 05:18
Оценка:
ошибка, описанная в пункте 1, только в IE
Re[2]: Проблемы с javascript после sp2
От: raw_loot  
Дата: 23.12.04 05:12
Оценка:
Не ужели не кто больше с этим не сталкивался
Re[3]: Проблемы с javascript после sp2
От: RAGIC Беларусь  
Дата: 23.12.04 05:21
Оценка:
Здравствуйте, raw_loot, Вы писали:

_>Не ужели не кто больше с этим не сталкивался


Подружка столкнулась — рецепт ищу...
Re: Проблемы с javascript после sp2
От: DrZubr Беларусь  
Дата: 23.12.04 09:46
Оценка:
Здравствуйте, raw_loot, Вы писали:

_>Здравствуйте, послу установки sp2 появились такие проблемы(а может были, но вылезли):


_>1)

function mMakeFrame(m, index){
    var newDiv=document.createElement("DIV");
  newDiv.className="menuFrame";
  newDiv.id="menu"+index;
  newDiv.innerHTML=mMakeFrameHTML(m);
  document.body.appendChild(newDiv);
}

_>appendChild() не выполняеться, пишет "операция прервана" и вылетает в "невозможно отобразить страницу", при чём, при показе алерта, видно созданный фрейм.

По поводу этого пункта.
Может ты не все нам рассказал? Потому что следующий код в SP2 работает на ура:
<html>
<body>
<script>
function mMakeFrame(m, index){
  var newDiv=document.createElement("DIV");
  newDiv.id="menu"+index;
  newDiv.innerHTML=m;
  document.body.appendChild(newDiv);
}
</script>
<input type="text" name="mText" value="Push me">
<input type="button" onclick="mMakeFrame(document.all.mText.value, Math.round(Math.random*1000))">
</body>
</html>

И какой фрейм? Я его здесь не вижу.

_>2)

function navLoaded(obj, to){
    if( (navigator.appName == "Microsoft Internet Explorer") && !(window.opera) ){
        document.getElementById(to).innerHTML=obj.contentWindow.document.body.innerHTML;
    }else{
        document.getElementById(to).innerHTML=obj.contentDocument.body.innerHTML;
    }
}

<iframe name="nav" onload="navLoaded(this, 'navigator')" class="navigatorFrame"></iframe>
<div id="navigator">111</div>

_>При запуске, iframe не используеться и должно показываться содержание div'а, но не показываеться при чём, если перед текстом поставить <script>alert('1')</script> показываеться.

В смысле iframe не используется?
У тебя срабатывает onload и происходит замещение содержимого div'а на содержимое iframe'а. Твой alert это и демонстрирует. Данное поведение наблюдается не только на SP2.

onload Event
Fires immediately after the browser loads the object.


_>3)

_>В IE, если переход по iframe'у осуществляеться на не существующую страницу, то в div содержание не передаёться(В NS и Opera всё нормально), и появляеться ошибка "Отказано в доступе".

Из соображений секьюрности.

_>4)

_>В примере на http://www.cross-browser.com устанавливаеться onerror для img, для iframe поставить не получаеться.
_>Так <iframe id="nav" onerror="f()"> у меня не получаеться, а через getElementById он почему-то его не находит.

У iframe нет события onerror, а у img есть.
См. MSDN.
_>.
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
ICQ [168117153]
Re[2]: Проблемы с javascript после sp2
От: raw_loot  
Дата: 23.12.04 12:49
Оценка:
Здравствуйте, DrZubr, Вы писали:
DZ>По поводу этого пункта.
DZ>Может ты не все нам рассказал? Потому что следующий код в SP2 работает на ура:
Прикол в том, что если appendChild закомментировать ошибка исчезает(проблема только с IE).Выложу полный код(он маленький)
core.js
function setMenu(layer){
    document.getElementById(layer).innerHTML=mMake();
}

make.js
function mMake(){
    var out;
    var i, k;
    
    out="<table id='mt' class='menuTitle'><tr>";
    for(i=0; i<MENU_TITLE.length; i+=2){
        mMakeFrame(MENU[i/2], i/2);
        out+="<td id='mt"+i/2+"'><nobr><a onmouseover='mShow(this, \""+i/2+"\")' target='nav' href=\""+MENU_TITLE[i+1]+"\">&nbsp\;"+MENU_TITLE[i]+"&nbsp\;</a></nobr></td>";
    }
    out+="</tr></table>";
    
 return out;
}

function mMakeFrame(m, index){
    var newDiv=document.createElement("DIV");
        newDiv.className="menuFrame";
        newDiv.id="menu"+index;
        newDiv.innerHTML=mMakeFrameHTML(m);

    document.body.appendChild(newDiv);
}

function mMakeFrameHTML(m){
    var out='', i;
    out += "<table>";

    for(i=0; i<m.length; i+=2){
        out += "<tr><td onmouseover='overOutBackground(this, \"#007722\", \"#005418\")'>";
        out += "<nobr><a target='nav' href=\""+m[i+1]+"\">&nbsp\;"+m[i]+"&nbsp\;</a></nobr>";
        out += "</td></tr>";
    }

    out += "</table>";
    
 return out;    
}


work.js
function mShow(obj, index){
    var i, mt_size=0, n;
    var m=document.getElementById("menu"+index);
    
    n=obj.parentNode.parentNode.id.replace(/mt/,"");
    i=MENU_TITLE.length/2;
    i--;
    if(n==i){
        mt_size=document.getElementById("menu"+i).offsetWidth;
    }else{
        for(i; i>=n; i--){
            mt_size += document.getElementById("mt"+i).offsetWidth;
        }
    }
    m.style.left=(document.body.clientWidth-mt_size)+"px";
    
    m.style.visibility="visible";
    obj.onmouseover=function(){
        document.getElementById("menu"+index).style.visibility="visible";
    }
    obj.onmouseout=function(){
        document.getElementById("menu"+index).style.visibility="hidden";
    }
}

Вызываеться так:

<div width="100%" id="iMenu"><script language="javascript">setMenu("iMenu");</script></div>


2)
DZ>В смысле iframe не используется?
Он используеться потом для навигации.
DZ>У тебя срабатывает onload и происходит замещение содержимого div'а на содержимое iframe'а.
Изначально src не установлен и документ не какой не загружаеться или это не играет роли?
DZ>Твой alert это и демонстрирует. Данное поведение наблюдается не только на SP2.
Если будет так:
<div id="navigator"><script>alert('1')</script>111</div>
, то содержание показываеться, если убрать <script>...</script>, то нет.

3)
DZ>Из соображений секьюрности.
Я имел ввиду страницу с ответом ошибки 404, в NS и Opera'е нормально, в IE только если у iframe задан src, а через target нет.
Re[3]: Проблемы с javascript после sp2
От: DrZubr Беларусь  
Дата: 23.12.04 17:52
Оценка:
Здравствуйте, raw_loot, Вы писали:

_>Прикол в том, что если appendChild закомментировать ошибка исчезает(проблема только с IE).Выложу полный код(он маленький)

_> <Поскипано>

Если уж выкладываешь примеры, то выкладывай хотя бы рабочие. И чтобы не надо было думать, есть ли тайный смысл в 3 js-файлах вместо того, чтобы ему быть одному и чего определение отсутствует. А так — никакого желания нет ковыряться и догадываться.

DZ>>В смысле iframe не используется?

_>Он используеться потом для навигации.
DZ>>У тебя срабатывает onload и происходит замещение содержимого div'а на содержимое iframe'а.
_>Изначально src не установлен и документ не какой не загружаеться или это не играет роли?

А для кого я лазил в MSDN и выдирал цитату?

_>Если будет так:
<div id="navigator"><script>alert('1')</script>111</div>
, то содержание показываеться, если убрать <script>...</script>, то нет.


А тебя не смущает, что в момент вызова alert и до тех пока ты кликнешь ОК отрисовка документа останавливается? Как я мыслю, пока ты кликнешь ОК, в модели документа уже есть элемент с id'шником navigator, но еще как бы пустой. Полностью он сгенерится только когда отработает скрипт.

_>Я имел ввиду страницу с ответом ошибки 404, в NS и Opera'е нормально, в IE только если у iframe задан src, а через target нет.


Попробуй направить свою навигацию сначала на гугл, потом на яндекс и сообщи о результатах.
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
ICQ [168117153]
Re[4]: Проблемы с javascript после sp2
От: raw_loot  
Дата: 24.12.04 02:47
Оценка:
Здравствуйте, DrZubr, Вы писали:

DZ>А так — никакого желания нет ковыряться и догадываться.

Понимаю , но суть в том, что не работает только в IE.

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

Про то, что нельзя забирать содержимое других сайтов знаю, уже пробовал. Проверил ещё раз, ситуация аналогичная "отказано в доступе". Но, меня интересует именно ответ об ошибки(проблема только с IE), раз нет возможности отлавливать oerror. Или есть другой способ?
Re: Проблемы с javascript после sp2
От: devic Fast Version Control System
Дата: 22.01.05 17:09
Оценка:
на счет пункта 1:
================
я тоже столкнлуся с такой проблемой. Как я поянл это баг.
проблема появляется если appendChild находится в таблице.
У меня не было этого метода в таблице, но страница была в iframe, а iframe был в таблице.
Так что если до самого топ окна встретится таблица,то будет ошибка.

покопавшись немного я решил не использовать appendChild. Добавил просто div контейнер и потом getElementById("mydiv").innerHTML="anything"
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.