在同一个项目中加载多个 jquery 版本但不同的页面

Posted

技术标签:

【中文标题】在同一个项目中加载多个 jquery 版本但不同的页面【英文标题】:Load multiple jquery version in the same project but not the same pages 【发布时间】:2021-05-14 07:21:43 【问题描述】:

我正在将一个 aspx 项目更新为 asp net MVC。由于工作正在进行中,一半的页面仍在 apsx 中。对于我的aspx页面,我需要加载jquery-1-xx,对于我的asp网页,jquery-3-xx(我在我的mvc页面上使用了一些jquery-3功能,但是在我的aspx页面上使用这个版本会引发我无法处理的错误)。

为此,我在我的 Portail_MasterPage 中加载了 jquery-1

<asp:ScriptReference Path="~/Scripts/jquery-1.10.2.js" />

为了在我的 asp 网页中添加 jquery-3,我使用了 bundles。我的 BundleConfig.cs 中有这个:

bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
                    "~/Scripts/jquery-3.5.1.js"));

然后我使用具有这一行的布局文件:

@Scripts.Render("~/bundles/jquery")

以及在每个 html 文件(asp 网页)中调用的内容:

@
ViewBag.Title = "SaisieConges";
Layout = "~/Areas/MVC/Views/Shared/_Layout.cshtml";

有了这个,我在我的aspx页面中加载了jquery-1-x-x,在我的asp网页中加载了jquery-1-x-x + jquery-3-x-x。但我最近发现在同一页面中加载两个 jquery 版本会引发问题。

所以,我想知道是否有一种方法可以仅加载一个特定的 jquery 版本,具体取决于我是否在 aspx 页面上。

感谢您的宝贵时间,对不起我的英语!

【问题讨论】:

我在一个 ASP 项目中做了类似的事情,但我根据我所在的网页(使用大小写/开关)有条件地加载了 CSS 文件。我相信你可以用 jQuery 做类似的事情。 为什么/如何将两者都加载到 MVC 中?他们应该使用不同的 masterpage / _layout 并且您的描述表明该布局只有 3.5 - 那么 tit 是如何获得 1.10 的?您是否将&lt;asp:ScriptReference 添加到您的MVC 页面?不要。 你在哪里写的这个声明?我不确定我是否可以有效地使用我的页面扩展作为加载特定版本的条件:/ 我认为 MVC 使用的是相同的母版页,因此它也会在我的 mvc 页面上加载 jquery-1 版本。我确认我的布局只有 3.5,所以我认为 1.10 来自母版页,因为它是我项目中唯一指定它的地方 那你应该解决那个问题而不是它的影响 【参考方案1】:

我找到了一种方法来做我想做的事,为整个项目(aspx + aspnet)保留一个全局母版页,但我不得不修改我的每个 aspx 文件(没关系,因为我打算删除它们一次更新)。

我已将我的脚本引用放在 ContentPlaceHolder 中,如下所示:

<asp:ContentPlaceHolder id="ScriptManager" runat="server">

    <asp:ToolkitScriptManager ID="ToolkitScriptManager0" runat="server" EnableScriptGlobalization="true" EnablePartialRendering="true" CombineScripts="false" ScriptMode="Release">
        <Scripts>
            ...
            <asp:ScriptReference Path="~/Scripts/jquery-3.5.1.js" />
            ...
        </Scripts>
    </asp:ToolkitScriptManager>

</asp:ContentPlaceHolder>

因此,默认情况下,每个文件都有 jquery-3-5-1。要覆盖此版本(而不是添加第二个版本),您可以像这样修改 aspx 页面中的原始 ContentPlaceHolder:

    <asp:Content ID="Content3" ContentPlaceHolderID="ScriptManager" Runat="Server">
    <asp:ToolkitScriptManager ID="ToolkitScriptManager0" runat="server" EnableScriptGlobalization="true" EnablePartialRendering="true" CombineScripts="false" ScriptMode="Release">
            <Scripts>
                ...
                <asp:ScriptReference Path="~/Scripts/jquery-1.10.2.js" />
        ...
            </Scripts>
     </asp:ToolkitScriptManager>
</asp:Content>

有了这个,我只能加载所需的 jquery 版本。

【讨论】:

以上是关于在同一个项目中加载多个 jquery 版本但不同的页面的主要内容,如果未能解决你的问题,请参考以下文章

iframe 未在 Jquery 中加载

如何在 webpack 模块中加载备用 jquery?

jQuery iframe 在 chrome 中加载,但不在 FF 和 IE 中

如果在同一个 AppDomain 中加载了多个版本,WPF 无法选择正确的 DLL

JQuery/CSS - 基于值的不同 <body> 背景图像,无需在 _Layout 页面上的 document.ready() 中加载

PHP jQuery在WordPress中加载最新版本