Konfiguration
Um das IFrame Control zu konfigurieren, gibt es einen Parameter:
Src:
Der Src dient zur Einstellung der Web-Adresse die aufgerufen werden soll.
TwinCAT HMI in einem IFrame
Wenn sie die Seite eines anderen TwinCAT HMI Servers im IFrame anzeigen möchten, besteht die Möglichkeit über Messages Info an den Client zu senden. Dies kann interessant sein, um den Splash Screen zu deaktivieren, das Theme oder die Sprache umzuschalten.
Message:
Attribute | Beschreibung |
|---|---|
'System.hideSplashScreen' | Mit System.hideSplashScreen wird der Ladebildschirm (SplashScreen) unterdrückt. Hierdurch wirkt die eingebettete TwinCAT HMI nicht wie ein Fremdkörper. |
'Theme.set' | Mit Theme.set wird der Theme im eingebeteten TwinCAT HMI auf den angegebenen Wert geändert. Hierdurch kann die TwinCAT HMI in einem zur Hauptseite entsprechenden Theme angezeigt werden und nicht nur im Default. |
'Locale.set' | Mit Local.set wird die Sprache im eingebetteten TwinCAT HMI auf den angegebenen Wert geändert. Hierdurch lässt sich die TwinCAT HMI an die Sprache der Hauptvisualisierung anpassen. |
Beispiel:
// get the iframe control
let someControl = TcHmi.Controls.get('TcHmiIFrame');
if (someControl !== undefined) {
// get the iframe element
let iFrameElement = someControl.getElement()[0].querySelector("iframe");
if (iFrameElement) {
const postMessageSender = (event) => {
if (!event.data?.messageType) {
return; // No tchmi answer. perhaps react devtools?
}
// hide splash screen
iFrameElement.contentWindow.postMessage(
{
messageType: 'System.hideSplashScreen',
},
"*",
);
// set theme with the active theme
iFrameElement.contentWindow.postMessage(
{
messageType: 'Theme.set',
themename: TcHmi.Theme.get()
},
'*'
);
// set locale with the active locale
iFrameElement.contentWindow.postMessage(
{
messageType: 'Locale.set',
locale: TcHmi.Locale.get()
},
'*'
);
// remove event
window.removeEventListener("message", postMessageSender);
};
// add event on message, checked the state of the other side
window.addEventListener("message", postMessageSender);
}
}