Hab noch mal in meinen Notizen nachgesehen. Also ab FW(13) ist das wohl so. Ob das bis heute so ist, kann ich nicht sagen, weil ich die die Datei ja überschreibe.
Für das Zoomen musst Du folgendes ändern.
<meta name="viewport" content="user-scalable=yes">
Ich mache das in einem Programm wie folgt. Bitte beachten, dass da das Favicon mit drin ist und die Auflösung der Visu.
VAR
sFileName : WagoAppFileDir.FileName := '/home/
codesys/PlcLogic/visu/webvisu.htm';
sNewContent : STRING(1024) :=
'<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="initial-scale=1.0">
<meta http-equiv="content-type" content="text/html;charset=UTF-8" />
<script language="javascript" src="webvisu.js"></script>
<script language="javascript" src="browsercontrol_ext0.js"></script>
<link rel="icon" href="favicon.png" type="image/png">
</head>
<body onload="new Webvisu($'background$', $'foreground$', false, false)">
<div id="cdsRoot" style="position: absolute; left: 0px; top: 0px; width: 360px; height:780px; overflow:hidden">
<canvas id="background" width="360" height="780" style="position: absolute; left: 0px; top: 0px;">Webvisu not supported due to missing browser feature HTML5-Canvas</canvas>
<canvas id="foreground" width="360" height="780" style="position: absolute; left: 0px; top: 0px;">Webvisu not supported due to missing browser feature HTML5-Canvas</canvas>
</div>
</body>
</html>';
fbFile : WagoAppFileDir.FbGeneralFile;
usiStep : INT;
xStart : BOOL:=TRUE;
END_VAR
VAR_OUTPUT
xDone : BOOL;
xError : BOOL;
eError : WagoAppFileDir.eResultCode;
END_VAR
===========================================================
fbFile();
CASE usiStep OF
0: //open file with write rights
IF xStart THEN
fbFile.Open(sFileName, WagoAppFileDir.eFileAccessMode.FAM_Write, WagoAppFileDir.eFileSyncMode.FSM_Regular, FALSE);
usiStep := 10;
xDone := FALSE;
xError := FALSE;
xStart := FALSE;
ELSE
xDone := TRUE;
END_IF
10: //overwrite file
IF fbFile.xIsOpen THEN
fbFile.Write(ADR(sNewContent), WagoAppString.StrLength(sNewContent, SIZEOF(sNewContent)));
usiStep := 20;
ELSIF fbFile.xError THEN
usiStep := 99;
END_IF
20: //close file
IF fbFile.xTerminated THEN
fbFile.Close();
usiStep := 30;
ELSIF fbFile.xError THEN
usiStep := 99;
END_IF
30: //is closing finished ?
IF fbFile.xTerminated THEN
usiStep := 0;
ELSIF fbFile.xError THEN
usiStep := 99;
END_IF
99: //error counter
xError := TRUE;
usiStep := 0;
eError := fbFile.eResult;
END_CASE