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 '<a name="form_anchor"></a>';
)并将&#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 - 如何将新网页滚动到上一行位置的主要内容,如果未能解决你的问题,请参考以下文章