2013-05-10 36 views
2

我想打开两个单独的标签,并保持它们在Firefox中打开。我正在使用WWW::Mechanize::Firefox。 请找到下面的代码:WWW :: Mechanize :: Firefox - 如何打开多个标签

#!/usr/bin/perl -w 
use strict; 
use WWW::Mechanize::Firefox; 

my @array = <DATA>; 

foreach (@array) 
{ 
    my $mech = WWW::Mechanize::Firefox->new( 
              activate => 1, # bring the tab to the foreground 
              autoclose => 0 # to prevent autoclosing of the Tab 
             ); 
    $mech->get($_); 
} 

__DATA__ 
www.google.com 
www.yahoo.com 

上面的代码工作正常,并创建两个选项卡。但是当我创建两个对象时,我对我的方法不满意。我正在寻找一些方法来打开多个选项卡。我无法用单个的$mech对象来实现,因此使用for循环创建了多个对象。

我已经通过下面的文档了:

WWW::Mechanize::Firefox

Firefox::Application

WWW::Mechanize::Plugin::Display

WWW::Mechanize::Firefox::Cookbook

但他们都不来回答这个问题。或者我可能错过了这些文档中的一些信息。

问题:

  1. 是否可以打开使用WWW::Mechanize::Firefox 或其他一些相关的Firefox机械化模块多个标签?如何?
  2. 个人而言,我不喜欢我的代码粘贴在上面,这是创建 多个对象。创建多个对象是否可行?

谢谢。

回答

1

创建多个对象没有任何内在的错误。你可能会担心内存开销。这些对象可能还有其他的东西(在这种情况下是本地主机TCP套接字),你不应该重复。每当你想要执行一个必须在这些对象间共享的逻辑动作时,你可能会发现必须循环使用多个对象才会让你感到恼火。

但是没有人会因恐惧而退缩。 “多重对象?!怎么想你。”

如果所有你想要做的就是打开多个标签页,我用的是这样的:

sub browse { 
    my $method = $_[1] ? 'new-window' : 'new-tab'; 
    system firefox => -remote => "openURL($_[0],$method)" 
} 
+0

感谢响应。但是,我无法理解您的代码。你能否详细说明一点?你的代码是否使用任何机械化方法?或者它只是一个伪代码?谢谢你的时间。 – slayedbylucifer 2013-05-11 13:54:44

+0

呃,什么?这是普通的Perl。它定义了一个子例程,访问参数,定义一个词法变量,用三元运算符选择一个值,用三个标量参数调用n-ary(安全)'system' - 其中两个是胖字符,最后一个字符串带有两个插值变量的文字。任何Perl教程都应该涵盖这一点。 – 2013-05-11 15:02:17

+0

我想我应该更精确。无论如何。在阅读https://developer.mozilla.org/en-US/docs/Mozilla/Command_Line_Options之后,您所说的话更有意义。我在考虑机械化的东西,因为你的代码运行firfox二进制CLI,因此我不会将两者联系起来。谢谢你的时间。 – slayedbylucifer 2013-05-11 15:58:31