У меня есть строгое браузерное javascript & xlst application. Он обычно используется на локальной машине, но иногда доступен через Apache.window.onready = function() Сбой в IE
Главная страница content.html, которая получает свой контент, динамически изменяющийся. В одном случае href на одной странице открывает новое окно, и в итоге выполняется следующий код, который устанавливает функцию onready с целью получения содержимого нового окна.
Это работает практически во всех случаях. Он работает во всех случаях для Firefox. И он даже работает во всех случаях для IE при локальном запуске (например, файл: /// C: /Program%20Files/Apache%20Software%20Foundation/Apache2.2/htdocs/hlic/index.html).
Моя проблема заключается в том, что при доступе через Apache в IE я просто получаю пустое окно. Это действует так, что функция onready никогда не запускается. Однако, если я добавлю предупреждение («огонь»), появится предупреждение, после чего мое содержимое окна будет отображаться. Так почему же он работает только с оповещением? Что еще я могу сделать, чтобы контент появился. Любая помощь будет принята с благодарностью.
Вот код:
/*
* PresentStreamInNewBrowser
*
* Creates a new browser window and fills with
* provided content stream. Also sizes the
* window to either default dimensions or to any
* supplied dimensions.
*
* A close and a print button are added to the bottom
* of the content stream.
*
* Inputs:
* pageStream - content stream to display
* in new window.
* height, width, top, left - dimensions
* for the newly opened window. (optional)
*
*/
function Presenter_PresentStreamInNewBrowser(pageStream, height, width, top, left)
{
// set the features
var features = "height=" + height;
features += ",width=" + width;
features += ",top=" + top;
features += ",left=" + left;
features += ",scrollbars=yes";
features += ",resizable=yes";
// open the window
var presenter = this;
var newWindow = window.open(
app.NormalizeURI("deview/frames/content.html"), '', features);
// the rest of the code executes when the content window
// calls its onready function, after it has loaded
newWindow.onready = function() {
var doc = newWindow.document;
// create stylesheet links if applicable
for(var i = 0; i < pageStream.stylesheet.length; i++) {
var linkElement = doc.createElement("link");
linkElement.rel = "stylesheet";
linkElement.href = pageStream.stylesheet[i];
doc.getElementsByTagName("head")[0].appendChild(linkElement);
}
// insert content
doc.body.innerHTML = "";
doc.body.appendChild(pageStream.content.importIntoDocument(doc));
doc.body.appendChild(doc.createElement("br"));
// Handle generation of special pages.
presenter.AddGeneratedContent(doc);
// add a close button
var selectionString =
"displayStrings/promptStrings/promptString[@id='close_button_anchor']";
var buttontext = app.displayStringsDOM.selectSingleNode(
selectionString).firstChild.nodeValue;
var closeButtonElement = doc.createElement("button");
closeButtonElement.id = "closebutton";
closeButtonElement.className = "addonbutton";
closeButtonElement.onclick = "javascript:window.close()";
closeButtonElement.value = buttontext;
doc.body.appendChild(closeButtonElement);
// add a print button
selectionString =
"displayStrings/buttonLabelStrings/buttonLabelString[@id='print_button_anchor']";
buttontext = app.displayStringsDOM.selectSingleNode(
selectionString).firstChild.nodeValue;
var printButtonElement = doc.createElement("button");
printButtonElement.id = "printbutton";
printButtonElement.className = "addonbutton";
printButtonElement.onclick = "javascript:window.print()";
printButtonElement.value = buttontext;
doc.body.appendChild(printButtonElement);
// close up shop
newWindow.document.body.appendChild(
newWindow.document.createElement("br"));
newWindow.document.title = '-';
// add some language dependent text
presenter.AddButtonLabel(doc);
presenter.AddExamLabels(doc);
//alert("fire");
}
}
Это было очень полезно. Спасибо! Для моего случая у меня может быть несколько всплывающих окон, инициированных с той же страницы, причем все они используют тот же код (content.html). Поэтому я просто не проверяю newWindowReadyFired в функции onready. –
На самом деле, вам все равно должно быть безопасно - «закрытие javascript» (определение области видимости, позволяющее внутренним методам доступа к внешним переменным метода) * должно означать, что есть новый экземпляр этой переменной, созданный для каждого вашего вызова Presenter_PresentStreamInNewBrowser(), и правильный пример будет указан в проверках. Я на 90% уверен в этом (что также означает 10% неопределенности, поэтому вы все равно захотите проверить это как-то, возможно, поставив alert(), чтобы показать значение var и проверить его на втором окне нагрузка) – Graza