Как ввести текст в текстовое поле с помощью MozRepl, если текст имеет обратную косую черту как часть текста?

my @para_text = (
"The build of $build CUT$cut was started as requested and 
its progress can be monitored in Anthill here", 
"",
"http://anthill:8080/tasks/project/BuildLifeTasks/viewBuildLife?
buildLifeId=$lifeid", 
"", 
'If it completes successfully (Overall Anthill status will show as green 
Complete and all sub steps as green Success) the built output will be 
available for deployment and testing by first copying the zip file from here 
\\\mizar\release\AnthillRelease\$build', 
"", "If the output exists but the anthill build was not completely 
successful DO NOT attempt to copy and deploy the output. \n", 
"We will send the usual email detailing content etc. when the build 
finishes. \n");

$para_text[0] =~ s/[\r\n]//gm;    # convert multiline to single line

@para_text = join "\n", @para_text;

s/([\\"])/\\$1/g, s/\n/\\n/g for @para_text;

$mech->eval_in_page( qq/document.getElementsByName("txtbdy")[0].value = "@para_text", "test"/ );

У меня есть код выше.

Массив содержит шаблон электронной почты, а скрипт создается вокруг веб-приложения Outlook с использованием WWW::Mechanize::Firefox,

В шаблоне электронной почты есть каталог с обратными слешами.

MozRepl не допускает обратную косую черту или какие-либо специальные символы при помещении текста в текстовое поле на $mech->eval_in_page линия.

Как я могу поставить обратную косую черту в тексте, если это не разрешено модулем?

2 ответа

Решение

Я удалил обратную косую черту из своего кода и использовал эту строку для замены их в

$para_text[4] =~ s{!}{\\}g;

Задача решена. Подстановка персонажа для обратной косой черты позже работает.

Посмотрите на этот ответ. Я должен был создать локальный файл HTML, и предположил, что вы используете <textarea />, как простой <input type="text" /> не будет принимать несколько строк

txtbdy.html

<html>
  <head>
    <title>Textbox test</title>
    <style type="text/css">
      #textbdy {
        width:  800;
        height: 300;
        resize: none;
      }
    </style>
  </head>
  <body>
    <form>
        <textarea name="txtbdy" id="textbdy" />
    </form>
  <body>
</html>

Здесь я использовал данные вашего вопроса, за исключением дублирования $para_text[4] исправить интерполяцию $build и проверить двойные кавычки (вокруг "Athill")

txtbdy.pl

    use utf8;
    use strict;
    use warnings 'all';

    use WWW::Mechanize::Firefox;

    my $mech = WWW::Mechanize::Firefox->new(
        tab      => qr/Textbox test/,
        create   => 1,
        activate => 1,
    );
    $mech->autoclose_tab( 0 );

    $mech->get( 'file://E:/Perl/source/txtbdy.html' );

    my $build  = "BUILD";
    my $cut    = "CUT";
    my $lifeid = "LIFEID";

    my @para_text = (
        "The build of $build CUT$cut was started as requested and 
its progress can be monitored in Anthill here",
        "",
        "http://anthill:8080/tasks/project/BuildLifeTasks/viewBuildLife?
buildLifeId=$lifeid",
        "",
        'If it completes successfully (Overall Anthill status will show as green 
Complete and all sub steps as green Success) the built output will be 
available for deployment and testing by first copying the zip file from here 
\\\mizar\release\AnthillRelease\$build',
        "",
        qq{If it completes successfully (Overall "Anthill" status will show as green 
Complete and all sub steps as green Success) the built output will be 
available for deployment and testing by first copying the zip file from here 
\\\\mizar\\release\\AnthillRelease\\$build},
        "",
        "If the output exists but the anthill build was not completely 
successful DO NOT attempt to copy and deploy the output. \n",
        "We will send the usual email detailing content etc. when the build 
finishes. \n"
    );

    my $para_text = join "\n", @para_text;

    s/([\\"])/\\$1/g, s/\n/\\r\\n/g for $para_text;

    $mech->eval_in_page( qq/document.getElementsByName("txtbdy")[0].value = "$para_text"/ );

выход

Эти выходные данные правильно представляют "неловкие" символы новой строки и двойной кавычки, что делает недействительным синтаксис строки JavaScript. Он использует точно такую ​​же замену, которую я предложил в моих комментариях к вашему предыдущему вопросу. Попытка интерполировать массив

s/([\\"])/\\$1/g, s/\n/\\n/g for @para_text;

вывод из txtbdy.pl

Другие вопросы по тегам