【问题标题】:target _blank in HTML::a not working yii2HTML::a 中的目标 _blank 不工作 yii2
【发布时间】:2020-11-26 15:51:54
【问题描述】:

我正在使用以下代码。

[
            'attribute' => 'Application',
            'format' => 'html',
            'value' => function ($dataProvider) {
                $student_username = $dataProvider->student_username;
                return Html::a('Print', Url::toRoute(['/coordinatorpanel/print-form', 'student_username' => $student_username]),
                    ['target' => '_blank', 'class' => 'btn btn-success center-block']);
            },
        ]

HTML 输出:

<a class="btn btn-success center-block" href="/nse/frontend/web/index.php?r=coordinatorpanel%2Fprint-form&amp;student_username=COR39690113" target="_blank">

但是,当我点击链接时,我没有导航到新选项卡,请求在同一个选项卡中处理。我在“Mozilla”和“Chrome”上都试过这个。

任何帮助都会得到深深的回报:)

【问题讨论】:

    标签: yii2-advanced-app


    【解决方案1】:

    在 gridview 中禁用 Pjax。就我而言,我想在新窗口中显示图像,但它在网格中显示为乱码。

    'format' => "raw",
    'value' => function ($d) {
         return Html::a($d->image_filename, '/'.$d->imagePath(),['target'=>'_blank', 'data-pjax'=>"0"] );
        },
    

    ps。注意使用原始格式的 XSS

    【讨论】:

    • 对于使用 Pjax 的 GridView,这是最简单的答案,即['data-pjax' =&gt; 0, 'target' =&gt; '_blank']。在大多数情况下,'format' =&gt; "raw", 甚至都不是必需的。
    • 关注@RichHarding
    【解决方案2】:

    尝试如下更改您的代码

    [
            'attribute' => 'Application',
            'format' => 'raw',
            'value' => function ($dataProvider) {
                $student_username = $dataProvider->student_username;
                return Html::a('Print', Url::toRoute(['/coordinatorpanel/print-form', 'student_username' => $student_username]),
                    ['target' => '_blank', 'class' => 'btn btn-success center-block']);
            },
        ]
    

    这里它使用'format' =&gt; 'raw' 来避免格式​​化。

    【讨论】:

      【解决方案3】:

      我假设这段代码在一些格式化输出的小部件中,因为这是常见的情况。如果是这样,只需将格式更改为raw

      【讨论】:

      • 我改了,但还是一样。我已经更新了代码
      • 它不适用于'format' =&gt; 'raw'?如果链接标签生成正确,请检查来源。
      • 感谢您的回复。通过将格式设置为“原始”,我已经使用链接标记的 HTML 输出更新了上述代码。但仍然没有积极作用。
      • 如果小部件的其余部分使用 Pjax,这将不起作用。在这种情况下,您只需使用:['data-pjax' =&gt; 0, 'target' =&gt; '_blank']
      【解决方案4】:

      试试这个方法,效果也很好-

      问题也可能出在pjax。即使您使用row 格式。

      在这种情况下,只需添加 linkSelector 参数:

      \yii\widgets\Pjax::begin(
          ['id' => 'samle', 'linkSelector' => 'a:not(.target-blank)']
      );
      

      并将相应的 css 类添加到您的链接中:

      return Html::a(
          'Print',
          ['/site/print', 'id' => $model->id],
          ['target'=>'_blank', 'class' => 'target-blank']
      );
      

      这将仅阻止来自pjax 的这些链接,以便它们可以在新标签中打开。

      【讨论】:

        【解决方案5】:

        我不得不另辟蹊径才能正确运行代码。

        You can click here for reference

        下面是我修改并为我工作的一段代码。我必须设置 'onclick' 事件并将 href 设置为空。

        [
            'attribute' => 'Application',
            'format' => 'raw',
            'value' => function ($dataProvider) {
                $student_username = $dataProvider->student_username;
                return Html::a('Print', '',
                    ['onclick' => "window.open ('".Url::toRoute(['/coordinatorpanel/print-form', 
                                  'student_username' => $student_username])."'); return false", 
                     'class' => 'btn btn-success center-block']);
            },
        ],
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-09-06
          相关资源
          最近更新 更多