web-dev-qa-db-ja.com

新しいjQueryバージョンをロードすることは可能ですか?

PHPのいくつかの行を使用して、Joomlaによって読み込まれたネイティブJHtml::_('jquery.framework')をオーバーライドすることは可能ですか?

テンプレートのこの行を置き換えることができることを理解しています。しかし、私はテンプレートビルダーを使用しているので、次の更新の後に戻ってきます。そうは言っても、変更を書き込む前にテンプレートにphpを追加できます。では、jQueryフレームワークのロードを無効にするために使用できるphpの行がある場合はどうなりますか?それは素晴らしいことです。

この質問の理由は、私がLightHouseテストでほぼ完璧なスコアを持っているためです。しかし、使用されたjQueryライブラリに既知の脆弱性があることを警告します。

screenshot LightHouse warning

テンプレートフォルダーに新しいバージョンのjQueryが用意されており、代わりに読み込むことができます。または、Joomlaは本当に1.xバージョンを必要としますか?

どんな洞察も最も高く評価されます。ありがとう!

3
TVBZ

または、Joomlaは本当に1.xバージョンを必要としますか?

Joomla自体は、新しいjQueryバージョンでほぼ正常に動作する可能性があります。このような古いバージョンに同梱されている理由は、サードパーティの拡張機能との互換性です。

では、jQueryフレームワークのロードを無効にするために使用できるphpの行がある場合はどうなりますか?

JQueryのロードを完全に無効にするには、JHtml::_('jquery.framework')をオーバーライドするプラグインを作成するか、最終的にjQueryをロードするレイアウトのオーバーライドを作成する必要があります。プラグインを使用して、カスタムバージョンをロードすることもできます。

defined('_JEXEC') or exit;

use Joomla\CMS\Factory;
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Plugin\CMSPlugin;

class PlgSystemExample extends CMSPlugin
{
    // Cache to allow running code only once.
    protected static $loaded = false;

    public function onAfterInitialise()
    {
        // Check that the method hasn't been used yet.
        if (!HTMLHelper::isRegistered('jquery.framework'))
        {
            // Register our custom method.
            HTMLHelper::register('jquery.framework', [__CLASS__, 'framework']);
        }
    }

    public static function framework($noConflict = true, $debug = null, $migrate = true)
    {
        // Load only once.
        if (!static::$loaded)
        {
            return;
        }

        // Load the main library
        HTMLHelper::_('script', 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js');

        // Check if we are loading in noConflict.
        if ($noConflict)
        {
            Factory::getApplication()->getDocument()->addScriptDeclaration('jQuery.noConflict();');
        }

        // Check if we are loading Migrate.
        if ($migrate)
        {
            HTMLHelper::_('script', 'https://cdnjs.cloudflare.com/ajax/libs/jquery-migrate/3.0.1/jquery-migrate.min.js');
        }

        // Enable cache flag.
        static::$loaded = true;
    }
}

または、jQueryスクリプトをテンプレートレベルでオーバーライドする場合は、カスタムスクリプトをtemplates/your_template/js/jui/jquery.min.js

5
Sharky