我已經爲使用客戶端PerlScript的IE編寫了一個非常小的html頁面。在腳本中,我啓動了一個創建TCP套接字的單獨進程。啓動該過程之後,我啓動了一個偵聽器,它在讀取行時將HTML附加到div的末尾,另外還用於調試,我在讀取每行時添加了警報。爲什麼寫入緩存在Internet Explorer中的html頁面?有沒有辦法解決它?
問題是,當線條被讀取時,警報發生在點上,但是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來觸發頁面渲染,響應這些html插入......等等。
在研究這個,我發現,我可以得到它呈現爲行被讀取if而不是onload,我使用div上的onclick。也許我沒有使用正確的事件,並且在子例程被觸發之前頁面沒有完全呈現?我對這裏的IE非常沮喪(第9節)。
是的,當我在命令行的情況下使用它時,所有事情都會像預期的那樣發生。 CreateServer/CreateClient只是用於客戶端和服務器的IO :: Socket :: INET的包裝器。
UPDATE(基於@Oleg V.沃爾科夫的答案):
我修改去,並增加了_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);
}
這似乎讓近實時更新。
這樣做的竅門,謝謝! –
我修改了go()爲: sub go { –