English 中文(简体)
为什么在互联网探索器中缓冲到一个 html 页面? 是否有办法绕过它?
原标题:Why are writes to an html page buffered in Internet Explorer? Is there a way around it?

我为 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);
}

这似乎得到了 的实时更新 。

最佳回答

大多数浏览器( 如果不是全部) 在您从主机脚本进程返回之前不会重新拖动页面。 它们可以回流某些操作的内部数据显示, 但是仍然不会花时间重新拖动它, 直到您重新拖动控制。 要让浏览器重新拖动, 您应该将您的任务分成一个步骤, 并且通过与您的脚本上的 < code> SetTimeout 和 < code> return 一起安排下一步骤, 来一次让您的任务分解一次 。

在您的特殊情况下, 替换 < code> slip(3) , 在那里您什么也不做, 下一个循环循环循环的时间安排将在3秒后发生, 似乎是最好的办法 。

问题回答

暂无回答




相关问题
Why does my chdir to a filehandle not work in Perl?

When I try a "chdir" with a filehandle as argument, "chdir" returns 0 and a pwd returns still the same directory. Should that be so? I tried this, because in the documentation to chdir I found: "...

How do I use GetOptions to get the default argument?

I ve read the doc for GetOptions but I can t seem to find what I need... (maybe I am blind) What I want to do is to parse command line like this myperlscript.pl -mode [sth] [inputfile] I can use ...

Object-Oriented Perl constructor syntax and named parameters

I m a little confused about what is going on in Perl constructors. I found these two examples perldoc perlbot. package Foo; #In Perl, the constructor is just a subroutine called new. sub new { #I ...

Where can I find object-oriented Perl tutorials? [closed]

A Google search yields a number of results - but which ones are the best? The Perl site appears to contain two - perlboot and perltoot. I m reading these now, but what else is out there? Note: I ve ...

热门标签