de la fenêtre.onready = function() Échoue dans IE
J'ai strictement basé sur un navigateur javascript & xlst application. Il est normalement utilisé sur un ordinateur local, mais il est parfois accessible via Apache.
La page principale est content.html qui est de son contenu modifié de manière dynamique. Dans un cas, un href dans une page s'ouvre dans une nouvelle fenêtre et, éventuellement, le code suivant est exécuté qui met en place une onready fonction, avec l'intention d'obtenir le contenu de la nouvelle fenêtre construit.
Cela fonctionne dans presque tous les cas. Il fonctionne dans tous les cas pour Firefox. Et cela fonctionne même dans tous les cas pour IE lors de l'exécution localement (par exemple, file:///C:/Program%20Files/Apache%20Software%20Foundation/Apache2.2/htdocs/hlic/index.html).
Mon problème est que lorsque l'on y accède via Apache dans IE, je viens d'obtenir une fenêtre vide. Il agit comme le onready fonction n'est jamais déclenché. Cependant, si j'ajoute une alerte("feu"), l'alerte est affichée, après qui, la fenêtre de mon contenu ne s'affiche. Alors pourquoi il ne fonctionne qu'avec l'alerte? Que puis-je faire pour obtenir le contenu à afficher. Toute aide serait grandement appréciée.
Voici le code:
/*
* 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");
}
}
Vous devez vous connecter pour publier un commentaire.
Vous pourriez peut-être essayer de vérifier le document readyState, quelque chose comme
Ne peut pas garantir que cela fonctionne, mais peut-être la peine d'essayer?
Meilleure supposition est que l'
ready
événement a déjà tiré dans la fenêtre cible par le temps que votre gestionnaire est attribué - en d'autres termes, vous vous heurtez à une condition de course.La solution que j'ai utilisé est d'avoir quelque chose dans content.html lui-même exécuter un rappel à la fenêtre parent à l'aide de
window.opener
soit en Javascript en ligne ou dans unready
gestionnaire dans content.html Est que possible dans votre cas d'utilisation?