Javascript-форум (https://javascript.ru/forum/)
-   Firefox/Mozilla (https://javascript.ru/forum/css-html-firefox-mizilla/)
-   -   Новое окно в Firefox (https://javascript.ru/forum/css-html-firefox-mizilla/23763-novoe-okno-v-firefox.html)

Sergey_New 05.12.2011 09:58

Новое окно в Firefox
 
Создал страницу test.html и файл test.js

Код:

<html><head><title></title>
<script src="test.js" type="text/javascript"></script>
</head>
<body onload="NewWindow()"></body>
</html>

test.js

function NewWindow() {
    win = window.self;
    with (win.document) {
        open();
        write(setTemp());
        close();
    }
//    alert("!");
    return false;
    
}function setTemp() {
    return '<html><head><title></title>'
           +'<script src="test.js" type="text/javascript"></sc'+'ript>'
           +'</head>'
           +'<body onload="writeList()">'
           +'<div id="List"></div>'
           +'</body></html>'
}

function writeList() {
    parent.document.getElementById("List").innerHTML="TEMP"
}
Работает в ИЕ, Опере.
Для отладки начал вставлять alert'ты.
Если раскоментировать alert в приведенном коде, срабатывает и в Firefox.
Где ошибка?

Sergey_New 11.12.2011 16:13

Ошибка:
attempt to run compile-and-go script on a cleared scope
Нашёл решение подобной проблемы:
Цитата:

Убил час на решение бага. На русском тривиального решения не описано и в поиске ответа дошел до bugzilla.mozilla.org/show... .
Если нужен динамический script (подставьте свое) и есть обращение к нему, а его нет ну по какой угодно причине, в 4ом firefox (4.0.1) скрипт упадет с выше приведенным error сообщением. Дешево и сердито создать нужный элемент и воткнуть его в DOM (куда-нибудь где display = 'none' или просто в конец страницы) и после этого использовать.
function() { with (document) { 
span = body.appendChild(createElement("SPAN")); //вот это может и лишнее 
span.style.display = 'none'; //но я решил поберечься 
var mys = createElement('SCRIPT');         
mys.language = "JavaScript"; 
span.appendChild(mys); 
//... и куча кода про то, что на самом деле делает script)) 
}

Цитата:

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


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