Batch file Canvas/Fabric.js交互式绘图don';t使用MSHTA.EXE刷新图形

Batch file Canvas/Fabric.js交互式绘图don';t使用MSHTA.EXE刷新图形,batch-file,canvas,html5-canvas,fabricjs,hta,Batch File,Canvas,Html5 Canvas,Fabricjs,Hta,我觉得我的问题有点不寻常。我编写了一个Windows批处理.BAT文件,从用户那里读取行(其中包含画布图形函数),并通过通过mshta.exe启动的管道将行发送到.HTA窗口;在.HTA文件中,通过fso.GetStandardStream(0).ReadLine()读取这些行,并通过eval()在HTA窗口上绘制图形。下面是代码,但在您开始搜索错误之前,您应该知道,除了下面我解释的细节之外,一切都正常工作 BatchFile.bat: @echo off if "%1" equ "HTA_i

我觉得我的问题有点不寻常。我编写了一个Windows批处理.BAT文件,从用户那里读取行(其中包含画布图形函数),并通过通过mshta.exe启动的管道将行发送到.HTA窗口;在.HTA文件中,通过
fso.GetStandardStream(0).ReadLine()
读取这些行,并通过
eval()
在HTA窗口上绘制图形。下面是代码,但在您开始搜索错误之前,您应该知道,除了下面我解释的细节之外,一切都正常工作

BatchFile.bat

@echo off

if "%1" equ "HTA_interface" goto HTA_interface

rem Start interactive drawing; send lines to HTA window via Stderr
"%~F0" HTA_interface 2>&1 1>&3 | mshta.exe "%~DP0\HTAwindow.hta"
goto :EOF


:HTA_interface
   set "canvas="
   set /P "canvas=Canvas function: "
   if not defined canvas goto :EOF
   echo %canvas% >&2
goto HTA_interface
<meta http-equiv='x-ua-compatible' content='ie=edge'/>

<HTML>

<HEAD>
<HTA:APPLICATION >
<TITLE>HTA BatchDrawing</TITLE>
</HEAD>

<BODY>
</BODY>

<canvas id="myCanvas" width="400" height="300" style="border:1px solid #000000;">
   Your browser does not support the HTML5 canvas tag
</canvas>

<SCRIPT language="JavaScript">

var fso = new ActiveXObject("Scripting.FileSystemObject"),
    stdin = fso.GetStandardStream(0),
    canvas = document.getElementById("myCanvas"),
    ctx = canvas.getContext("2d");

window.alert("HTA window started!");

while ( ! stdin.AtEndOfStream ) {
   eval(stdin.ReadLine());
}

</SCRIPT>

</HTML>
HTAwindow.hta

@echo off

if "%1" equ "HTA_interface" goto HTA_interface

rem Start interactive drawing; send lines to HTA window via Stderr
"%~F0" HTA_interface 2>&1 1>&3 | mshta.exe "%~DP0\HTAwindow.hta"
goto :EOF


:HTA_interface
   set "canvas="
   set /P "canvas=Canvas function: "
   if not defined canvas goto :EOF
   echo %canvas% >&2
goto HTA_interface
<meta http-equiv='x-ua-compatible' content='ie=edge'/>

<HTML>

<HEAD>
<HTA:APPLICATION >
<TITLE>HTA BatchDrawing</TITLE>
</HEAD>

<BODY>
</BODY>

<canvas id="myCanvas" width="400" height="300" style="border:1px solid #000000;">
   Your browser does not support the HTML5 canvas tag
</canvas>

<SCRIPT language="JavaScript">

var fso = new ActiveXObject("Scripting.FileSystemObject"),
    stdin = fso.GetStandardStream(0),
    canvas = document.getElementById("myCanvas"),
    ctx = canvas.getContext("2d");

window.alert("HTA window started!");

while ( ! stdin.AtEndOfStream ) {
   eval(stdin.ReadLine());
}

</SCRIPT>

</HTML>
问题在于每个单独图形的绘制不会立即发生:直到管道左侧终止,.HTA窗口才出现在屏幕上,然后,.HTA窗口与所有图形一起出现

我用谷歌搜索了这个网站,寻找类似的问题,但所有相关的例子和答案都是通过放在同一个HTML文档中的JavaScript代码创建的交互式图形。我尝试了以下解决方案,但没有成功:

  • 在绘制每个图形之后,我安装并使用了
    canvas.renderAll()
    方法。当然,我在批处理文件输入中使用了Fabric的等效
    canvas.add(newfabric.FIG(…)
    函数,而不是普通的canvas函数。不管用

  • 我使用了教程中介绍的方法:
    draw()
    函数用于在出现新图形时刷新窗口,该函数通过
    setInterval(draw,INTERVAL)
    定期执行。不行

先前的“不工作”表示当输入终止时,程序的所有版本都成功地显示所有图形,但在每行发送后不显示单独的图形

我还尝试在绘制每个图形后插入
window.location.reload()
方法,但这只会导致无休止的循环

这里有什么问题?有办法解决吗?短暂性脑缺血发作