我为 IE 撰写了一个非常小的 html 页面, 该页面使用客户端端 PerlScript 。 在脚本中, 我启动一个创建 TCP 套接字的单独进程 。 在启动此程序后, 我开始一个听众, 将 HTML 附加到 div 结尾, 作为行的读取, 另外为了调试, 我添加了每行读取的提醒 。
问题是当行读取时, 警示会击中点, 但是 HTML 在进程完成之前不会更新 。 为什么呢? 是否有办法强制页面进行转换, 这样我就能得到相同的行为?
这里的页面 :
<html>
<head>
<title>Message Test</title>
<script language=perlscript>
use util;
use Win32::Process;
my $alreadyrunflag = 0;
sub _write {
$window->document->body->insertAdjacentHTML("beforeEnd", $_[0]);
}
sub go {
_write("starting!<br/>");
my $port = 12345;
#//system("start /b /NORMAL perl C:/development/plslog/clitest2.pl $port");
Win32::Process::Create(my $Proc, "C:/perl/bin/perl.exe", "perl clitest2.pl 12345", 1, CREATE_NO_WINDOW | NORMAL_PRIORITY_CLASS | DETACHED_PROCESS, "C:/development/plslog");
$window->alert("Hi! started!");
if (defined (my $INPUT = util::CreateClient($port))) {
while(defined (my $line = <$INPUT>)) {
_write($line);
sleep(3);
}
}
_write("ending!");
}
$window->setTimeout("go()",0);
</script>
</head>
<body>
<div id="content"></div>
</body>
</html>
我查看了 PerlScript 的在线文件, 这个文件非常稀少。 我在找如何命令 IE 使用 fire pages 、 回应这些 html 插入... 等提示 。
在研究这个问题时,我发现,我可以把它做成线条,如果不是在上载,而是在迪夫上用一个点击。也许我没有使用正确的事件,而该页面在子例程被解雇之前没有完全完成?我对IE在这里(v.9)感到非常沮丧。
是的,当我在命令行情况下使用它时, 所有的一切都会照预期发生火灾。 创建服务员/创建服务员只是围绕 IO: Socket:: INET 为客户端和服务器提供包装。
UPDATE (基于 @Oleg V. Volkov s 答复):
我修改后添加了读行的 _read () 函数, 然后将控件传回浏览器进行转换。 似乎做得很好 。
sub _read() {
my $port = shift;
$INPUT = util::CreateClient($port) if ! $INPUT;
if (defined (my $line = <$INPUT>)) {
_write($line);
$window->setTimeout("_read($port)", 0);
}
else {
_write("Fin!");
}
}
sub go() {
_write("starting!<br/>");
my $port = 12345;
Win32::Process::Create(my $Proc, "C:/perl/bin/perl.exe", "perl clitest2.pl $port", 1, CREATE_NO_WINDOW | NORMAL_PRIORITY_CLASS | DETACHED_PROCESS, "C:/development/plslog");
$window->alert("Hi! started!");
$window->setTimeout("_read($port)", 0);
}
这似乎得到了 在 的实时更新 。