Perl - 如何将新网页滚动到上一行位置

Posted

技术标签:

【中文标题】Perl - 如何将新网页滚动到上一行位置【英文标题】:Perl -- how to scroll new web page to previous line position 【发布时间】:2014-06-16 06:49:58 【问题描述】:

在 perl 脚本创建一个新网页后,是否有类似 (goto-char previous-position) 的内容 - 例如,在生成新页面之前,记录用户所在的当前行号并将其存储为变量(即,@987654322 @),然后在创建新网页后滚动到​​同一位置?


编辑:这是我在谷歌上发现的似乎相关的内容。如果页面位置可以记录为变量并传递给脚本并在加载新网页时执行,那么这也许是一个可行的解决方案:

html 方式是在您想要滚动到的位置声明以下内容:

[HTML]<a name="somename">[/HTML]

然后页面可以通过访问例如自动滚动到该页面。

[HTML]http://www.yourwebsite.com/yourpage.html#somename[/HTML]

javascript 方法是使用 scrollTo 以及从左侧和顶部到您想要滚动到的位置的坐标,例如展开|选择|换行|行号

window.scrollTo(0,100);

要在页面加载时实现这一点,请在正文 onload 上使用

[HTML]<body onload="window.scrollTo(0,100); ...>[/HTML]

或定义一个函数并调用它。

【问题讨论】:

与其投票结束,不如引导我走向正确的方向?以我 3,304 的名声,我显然有一些编程经验。看看我的用户历史中的问题和答案,你们都会看到我没有懈怠。 如果我理解了这个问题,这可以概括为“我如何维护 HTTP 请求之间的状态?”这是对您的问题的更一般(和可搜索)的准确解释吗? @DavidO -- 是的,如果我可以在用户之前点击的链接的行号附近记录一个模式,那么网页顶部的 re-search-forward 就足够了。 恐怕我不知道你所说的行号、向前搜索等是什么意思。听起来你可能想渲染页面的某些部分,然后在下一个请求时渲染下一个页面的一部分。这将涉及将您的页面分成仍然是完整的 HTML 文档的块,然后设置一个 cookie,该 cookie 会在检索时显示哪个块已经发送到客户端,以及接下来应该发送哪个块。 所以在阅读了您的更新和最近的跟进之后,我认为这是一个标记为 Perl 的 JavaScript 问题。 【参考方案1】:

perl / html 中的解决方案非常简单,以至于每个人都错过了它,并认为它必须是 javascript。我们需要做的就是在 html 中添加一个锚点(例如,print '&lt;a name="form_anchor"&gt;&lt;/a&gt;';)并将&amp;#form_anchor 放在 perl 脚本参数的末尾。 [在 javascript 中提供了不同的解决方案,但我更喜欢将解决方案包含在现有的 perl 脚本中。]

注意:可以轻松地为所需的每个链接设置锚点,以便在单击链接时将适当的参数传递给 perl 脚本。

在某个时候,我会重新审视这个答案并将其修改/编辑成一个更简单的例子——但是,现在已经很晚了,下面列出的脚本完全符合我的预期。

#!/usr/bin/perl

use CGI qw(:standard);

# ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
# yasnippet

my $yasnippet_dir = '/home/lawlist/.0.data/.0.emacs/.0.snippets/lawlist-tex-mode';

my $yasnippet_query = new CGI;

my $selected_file_yasnippet = $yasnippet_query->param('selected-file-yasnippet');

my $yasnippet_selected_file = $yasnippet_dir . "/" . $selected_file_yasnippet;

# ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
# forms

my $form_dir = '/home/lawlist/.0.data/forms';

my $form_query = new CGI;

my $selected_file_form = $form_query->param('selected-file-form');

my $form_selected_file = $form_dir . "/" . $selected_file_form;

# ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
# header

print "Content-type: text/html\n\n";

open(FILE,'/home/lawlist/www/header.include.shtml') and print <FILE>;

# ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
# yasnippet

print <<HTML;

<table bgcolor="#990066"  cellspacing=0 cellpadding=6 border=0>
<tr>
<td>
<table  bgcolor="#FFFFCC" cellspacing=0 cellpadding=10 border=0>
<tr>
<td>

<table  bgcolor="#000000" cellpadding=2>
<tr>
<td align=center>
<table  border=0 cellpadding=0 cellspacing=0>
<tr>
<td bgcolor="#990066" HEIGHT=25 align=center><font face="verdana,arial,helvetica" COLOR="#FFFFFF" size=3><b>Yasnippet -- Code Snippets</b></font></td>
</tr>
</table>
</td>
</tr>
</table>

<br>

<table  border=0 cellspacing=0 cellpadding=2>
<tr>
<td rowspan="1" ><font face="verdana,arial,helvetica" color="#000000" size=3>

HTML

opendir(DIR, $yasnippet_dir) or die $!;

while (my $yasnippet_selected_file = readdir(DIR)) 

  next if ($yasnippet_selected_file =~ m/^\.|exclude-filename\.txt/);

  next unless (-f "$yasnippet_dir/$yasnippet_selected_file");

  next unless ($yasnippet_selected_file =~ m/\.txt|.el|.yasnippet$/);

  print '<a href="/cgi-bin/code-snippet.cgi?selected-file-yasnippet=' . $yasnippet_selected_file . '">' . $yasnippet_selected_file . "</a>" . "<br>\n<br>" . "\n\n"; 

closedir(DIR);

if ($selected_file_yasnippet) 

  open (DATA, $yasnippet_selected_file) or return $self->print_json_error($self->language('ERR_CANNOT_OPEN', $yasnippet_selected_file->selected-file-yasnippet, $!));

  read (DATA, my $yasnippet_selected_file, -s DATA);

  close DATA;

  print '</td><td rowspan="1" ><font face="verdana,arial,helvetica" color="#000000" size=3>';

  print '<pre class="brush:  lisp">' . "\n\n" . $yasnippet_selected_file . "\n" . '</pre>';

  print "\n\n<br>\n";

  close FILE; 

print <<HTML;

</font>

</td>
</tr>
</table>

</td>
</tr>
</table>

</td>
</tr>
</table>

<!-- end of cream color table -->
<!-- end of red border table -->

<hr COLOR="#CCCCCC" size=1 NOSHADE>

HTML

# ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
# forms

print <<HTML;

<table bgcolor="#990066"  cellspacing=0 cellpadding=6 border=0>
<tr>
<td>
<table  bgcolor="#FFFFCC" cellspacing=0 cellpadding=10 border=0>
<tr>
<td>

<table  bgcolor="#000000" cellpadding=2>
<tr>
<td align=center>
<table  border=0 cellpadding=0 cellspacing=0>
<tr>
<td bgcolor="#990066" HEIGHT=25 align=center><font face="verdana,arial,helvetica" COLOR="#FFFFFF" size=3><b>Forms -- Code Snippets</b></font></td>
</tr>
</table>
</td>
</tr>
</table>

<br>

<table  border=0 cellspacing=0 cellpadding=2>
<tr>
<td rowspan="1" ><font face="verdana,arial,helvetica" color="#000000" size=3>

HTML

opendir(DIR, $form_dir) or die $!;

while (my $form_selected_file = readdir(DIR)) 

  next if ($form_selected_file =~ m/^\.|exclude-filename\.txt/);

  next unless (-f "$form_dir/$form_selected_file");

  next unless ($form_selected_file =~ m/\.txt|.el|.yasnippet$/);

  print '<a href="/cgi-bin/code-snippet.cgi?selected-file-form=' . $form_selected_file . '&#form_anchor' . '">' . $form_selected_file . "</a>" . "<br>\n<br>" . "\n\n"; 

closedir(DIR);

if ($selected_file_form) 

  open (DATA, $form_selected_file) or return $self->print_json_error($self->language('ERR_CANNOT_OPEN', $form_selected_file->selected-file-form, $!));

  read (DATA, my $form_selected_file, -s DATA);

  close DATA;

  print '</td><td rowspan="1" ><font face="verdana,arial,helvetica" color="#000000" size=3>';

  print '<a name="form_anchor"></a>';

  print '<pre class="brush:  lisp">' . "\n\n" . $form_selected_file . "\n" . '</pre>';

  print "\n\n<br>\n";

  close FILE; 

print <<HTML;

</font>

</td>
</tr>
</table>

</td>
</tr>
</table>

</td>
</tr>
</table>

<!-- end of cream color table -->
<!-- end of red border table -->

HTML



# ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

  open(FILE,'/home/lawlist/www/footer.include.shtml') and print <FILE>;


exit 0;

【讨论】:

以上是关于Perl - 如何将新网页滚动到上一行位置的主要内容,如果未能解决你的问题,请参考以下文章

打开一个网页时,如何指定滚动条去到50%左右中间的位置?

如何让TListView滚动到某一行的位置

网页滚动条滚动到一定位置后,加载数据,而且数据是由动态效果的怎么做?

网页滚动到底部,拉取数据

如何用js控制网页刷新后滚动条保持在原来的位置

当该页面打开时,如何在顶部设置包含 iframe 的网页的滚动位置