Как открыть новую страницу с помощью всплывающего меню Perl CGI - PullRequest
1 голос
/ 24 марта 2020

I wi sh, из сценария Perl -cgi ниже, чтобы открыть новую страницу, когда мы выбираем элемент в меню; как мы делаем с window.open. Если у кого-то есть представление о том, как я могу выполнить команду, подобную: window.open ('http://www.google.com', '_blank', 'панель инструментов = 0, местоположение = 0, menubar = 0');

Заранее спасибо

#!/usr/bin/perl -Tw
use strict;
use warnings;
use utf8;
use CGI ;
my $cgi = new CGI;
my %url = (
    "https://www.google.com"    => "google" ,
    "https://www.msn.com"       => "msn",
    "https://www.yahoo.com"     => "yahoo" 
);
print $cgi->header("text/html;charset=UTF-8");
print "<!DOCTYPE html>";
print "<html>\n";
print "<head>\n";
print "</head>\n";
print "<body>\n";
print '<form>'."\n";
print $cgi->popup_menu(
  - name     => 'url',
  - id       => 'url',
  - values   => [sort keys %url],
  - default  => ['google'],
  - labels   => \%url,
  - onchange => 'submit();'
    #- onchange => "this.form.submit();"
);
print "</form>\n";
print "</body>\n";
print "</html>\n";

1 Ответ

2 голосов
/ 24 марта 2020

У вас почти это есть, но вы, вероятно, хотите this.value.

print $cgi->popup_menu(
  - name     => 'url',
  - id       => 'url',
  - values   => [sort keys %url],
  - default  => ['google'],
  - labels   => \%url,
  - onchange => q{window.open(this.value, '_blank', 'toolbar=0,location=0,menubar=0');},
);

Но, как я уже прокомментировал, поскольку эти методы CGI устарели, пожалуйста, рассмотрите возможность использования альтернативного as Template :: Toolkit . Обычным шаблоном в TT является наличие двух файлов, которые могут выглядеть следующим образом.

Файл Perl:

#!/usr/bin/perl -Tw

# my_form.cgi

use strict;
use warnings;
use utf8;
use HTTP::Headers;
use Template;

my $headers = HTTP::Headers->new;
$headers->header('Content-Type' =>  'text/html;charset=UTF-8');
print $headers->as_string;

my %urls = (
    "https://www.google.com"    => "google" ,
    "https://www.msn.com"       => "msn",
    "https://www.yahoo.com"     => "yahoo" 
);

my $template = Template->new;
$template->process('my_form.ttml', { urls => \%urls });

Файл шаблона:

[%# my_form.ttml %]
<!DOCTYPE html><html>
<head>
</head>
<body>
<form>
  <select name="url"  id="url" onchange="window.open(this.value, '_blank', 'toolbar=0,location=0,menubar=0');">
    [% FOREACH url IN urls -%]
      <option value="[% url.key %]">[% url.value %]</option>
    [% END -%]
  </select>
</form>
</body>
</html>

Вы можете посмотреть Template :: Manual и Template :: Manual :: Intro для получения подробной информации о Template :: Toolkit, или вы можете посмотреть CGI :: Alternatives для большего вдохновения.

...