Frage

Im Haupt Gadget html gibt es einen div mit einer Onclick, dass Anrufe dieser Methode in der Gadget-Skriptdatei:

ShowFlyout = function() 
{
    System.Gadget.Flyout.show = true;
    var flyoutDoc = System.Gadget.Flyout.document;
    var mainFlyoutDiv = flyoutDoc.getElementById('divFlyout');
    mainFlyoutDiv.innerHTML = "hello";
}

Hier ist die Flyout html:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
    <title>This is a flyout</title>
    <link href="Css\FlyoutStyle.css" type="text/css" rel="Stylesheet" />
</head>
<body>
    <div id="divFlyout" >
    </div>
</body>
</html>

Das Problem ist, dass mainFlyoutDiv immer null ist. Wenn sie in das System.Gadget.Flyout.document Objekt durch den Debugger Peering, ist der Körperparameter null - ich glaube nicht, das ist richtig. Der System.Gadget.Flyout.file Wert wird an anderer Stelle, wenn das Gadget lädt zunächst eingestellt.

Was mache ich falsch?

Auch dann, wenn die System.Gadget.Flyout.show Eigenschaft wahr sein müssen, bevor die System.Gadget.Flyout.document Eigenschaft zugegriffen werden kann? Mein Ziel ist es, ein Flyout zu öffnen und sie dynamisch bevölkern die html

War es hilfreich?

Lösung

Das Problem hier ist das Flyout wird asynchron geladen (weil es ein völlig neues Fenster ist). Die Zeile

var mainFlyoutDiv = flyoutDoc.getElementById('divFlyout'); 

ausgeführt wird, bevor das Flyout Dokument beendet wird analysiert, weshalb die null ist - das Element noch nicht existiert. Es gibt ein paar Optionen zur Verfügung, mein Liebling, der so etwas wie folgt aus:

ShowFlyout = function()    
{   
    System.Gadget.Flyout.show = true;   
    var flyoutWin = System.Gadget.Flyout.document.parentWindow;   
    flyoutWin.myCustomVar = "Hello";
}

Und in Ihrem Flyout HTML, fügen Sie ein Skript mit dem folgenden Code:

window.onload = function ()
{
    document.getElementById("divFlyout").innerHTML = myCustomVar;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top