我想在 'script' 之后添加一个字符串 at JHtml::_('script', $file, true, true);

I would like to add a string after 'script' at JHtml::_('script', $file, true, true);

在 Joomla 3.6 的 Recaptcha 插件的 recaptcha.php 文件中,我有以下代码:

case '2.0':
            $theme = $this->params->get('theme2', 'light');
            $file  = 'https://www.google.com/recaptcha/api.js?hl=' . JFactory::getLanguage()->getTag() . '&render=explicit';

            JHtml::_('script', $file, true, true);

            $document->addScriptDeclaration('jQuery(document).ready(function($) {$(window).load(function() {'
                . 'grecaptcha.render("' . $id . '", {sitekey: "' . $pubkey . '", theme: "' . $theme . '"});'
                . '});});'
            );
            break;

在呈现的 html 页面上创建字符串:

<script src="https://www.google.com/recaptcha/api.js?hl=en-US&amp;render=explicit" type="text/javascript"></script>

正在为重新验证加载 api.js。 由于我使用的是 Cloudflare 的 Rocket Loader 并且 Recaptcha 在网站上不起作用,我想将上面的行更改为:

<script data-cfasync="false" src="https://www.google.com/recaptcha/api.js?hl=en-US&amp;render=explicit" type="text/javascript"></script>

之后的地方

  1. 我使用了一个变量 $cloud = 'data-cfasync="false"';并改变了 JHtml::('script', $file, true, true);到 JHtml::('script', $cloud, $文件,真,真);
  2. 我试过了JHtml::script data-cfasync="false" ($file, true, true);
  3. 我试过 JHtml::('script data-cfasync="false"', $file, true, true);
  4. 我试过了 JHtml::('script'.'data-cfasync="false"', $file, true, true);

但是什么都没用.......

我知道他们中的一些人很愚蠢,但我不是一个真正的程序员,你已经知道了。 我怎样才能做到这一点? 谢谢 乔治

如果您检查该函数的定义,您会看到最后一个参数允许您设置属性 - libraries/src/HTML/HTMLHelper.php

public static function script($file, $options = array(), $attribs = array()){
 ....
 ....
}

你可以像下面的代码那样做 -

JHtml::_('script', $file, array(), array('data-cfasync' => "false"));

但我不建议您这样做,因为您正在更改核心文件,这些更改将在下一次 Joomla 更新中丢失。建议您看看是否可以进行以下任何更改 -

1) 检查 Cloudflare 是否有一些选项可以排除特定脚本

2) 您可以使用与现有 recaptcha 插件相同的代码创建一个新插件

3) 您可以创建一个插件来删除 api.js 并添加具有该自定义属性的脚本。

我希望这能回答你的问题。

更新

较旧的 Joomla 版本有不同的定义,因此对于您的情况,我建议您按照以下说明进行操作 -

$script = '<script src="' . $file . '" data-cfasync="false"></script>';
$document = JFactory::getDocument();
$document->addCustomTag($script);