Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在DotNetNuke(DNN)中只加载一次fancybox(JS已经包含在主题和模块中)_Javascript_Duplicates_Dotnetnuke_Scriptmanager - Fatal编程技术网

Javascript 如何在DotNetNuke(DNN)中只加载一次fancybox(JS已经包含在主题和模块中)

Javascript 如何在DotNetNuke(DNN)中只加载一次fancybox(JS已经包含在主题和模块中),javascript,duplicates,dotnetnuke,scriptmanager,Javascript,Duplicates,Dotnetnuke,Scriptmanager,我有一个DotNetNuke网站,我得到一个“fancybox已初始化”错误 我想知道如何在页面加载时检查并只包含一次JavaScript文件?我知道脚本管理器只会添加JS文件一次,但是如果皮肤不使用脚本管理器呢 主题以以下方式将JavaScript文件包含在.ascx文件中: <dnn:DnnJsInclude runat="server" FilePath="js/jquery.fancybox3.min.js" PathNameAlias="SkinPath" /> 我需要将

我有一个DotNetNuke网站,我得到一个“fancybox已初始化”错误

我想知道如何在页面加载时检查并只包含一次JavaScript文件?我知道脚本管理器只会添加JS文件一次,但是如果皮肤不使用脚本管理器呢

主题以以下方式将JavaScript文件包含在.ascx文件中:

<dnn:DnnJsInclude runat="server"
FilePath="js/jquery.fancybox3.min.js" PathNameAlias="SkinPath" />
我需要将Fancybox JS添加到我的所有模块中,因为它们可以安装在已包含Fancybox或未包含Fancybox的主题上

如果模块没有放在特定页面上,我需要包含在主题中的Fancybox代码

我一直在考虑在我的所有模块上创建一个门户设置,这将允许您在Fancybox JS文件已经包含在主题中时关闭它的包含

我看过其他帖子,但我的问题涉及DNN模块和主题本身

我确实尝试在本文的主题中使用此代码,但似乎不起作用:


通常在这种情况下,我会确保我的模块都包含使用客户机资源管理API(或dnnJsInclude)的脚本。这可以防止多次从添加到页面的模块中注册多个脚本。但是,由于可以从主题或模块注册脚本,因此可能无法防止重复,因为脚本的路径不同

更好的做法是在模块和主题安装包中包含Fancybox js库,作为DNN的一个组件。这将允许您在CMS中集中管理javascript(在设置>扩展>javascript库下),并通过名称引用将其包含在您的主题或模块中-这将消除页面上的重复包含

为此,在根包zip中包含minified.js文件,并在theme和module.dnn清单文件中包含一个新的部分:

<package name="Fancybox" type="JavaScript_Library" version="3.1.20">
  <friendlyName>jQuery Fancybox</friendlyName>
  <description>jQuery lightbox script for displaying images, videos and more.</description>
  <iconFile></iconFile>
  <owner>
    <name>fancyApps</name>
    <organization>fancyApps</organization>
    <url>http://www.fancyapps.com</url>
    <email>support@fancyapps.com</email>
  </owner>
  <license />
  <releaseNotes />
  <azureCompatible>true</azureCompatible>
  <dependencies />
  <components>
    <component type="JavaScript_Library">
      <javaScriptLibrary>
        <libraryName>Fancybox</libraryName>
        <fileName>jquery.fancybox.min.js</fileName>
        <objectName>fancybox</objectName>
        <cdnUrl>https://cdnjs.cloudflare.com/ajax/libs/fancybox/3.1.20/jquery.fancybox.min.js"</cdnUrl>
        <preferredScriptLocation>PageHead</preferredScriptLocation>
      </javaScriptLibrary>
    </component>
    <component type="JavaScriptFile">
      <jsfiles>
        <libraryFolderName>Fancybox</libraryFolderName>
        <jsfile>
          <name>jquery.fancybox.min.js</name>
        </jsfile>
      </jsfiles>
    </component>
  </components>
</package>
或。ASCX包括:

<%@ Register TagPrefix="dnn" TagName="JavaScriptLibraryInclude" Src="~/admin/Skins/JavaScriptLibraryInclude.ascx" %>

<dnn:JavaScriptLibraryInclude runat="server" Name="Fancybox" />


清单文件失败,因为存在扩展名为.png的文件名。我确实尝试将其更改为JS文件名,但没有成功。我删除了部分,它工作和安装。我现在只需要让它在我的模块中工作。当我将此代码添加到模块包下面,并在DNN中选择install.zip文件时,会显示:“在zip文件中找不到DNN中指定的信息读取组件清单-JavaScriptFile失败文件:”我使用的是Christoc模块模板,JS文件放在模块文件夹中名为Scripts的文件夹中。我想你只需要换一行,我会从我的答案中删除这一部分。这只是为了不必要的扩展图标。谢谢你的帮助。我试图更改它,但在DNN中出现此错误。“在zip文件中找不到dnn中指定的信息读取组件清单-JavaScriptFile失败文件:-C:\inetpub\wwwroot\DNNHosted\Install\Temp\svcom2pk\Scripts\jquery.fancybox.min-3.1.20.js”是否存在类似于dnn节使用的文件夹或基本路径?
<package name="Fancybox" type="JavaScript_Library" version="3.1.20">
  <friendlyName>jQuery Fancybox</friendlyName>
  <description>jQuery lightbox script for displaying images, videos and more.</description>
  <iconFile></iconFile>
  <owner>
    <name>fancyApps</name>
    <organization>fancyApps</organization>
    <url>http://www.fancyapps.com</url>
    <email>support@fancyapps.com</email>
  </owner>
  <license />
  <releaseNotes />
  <azureCompatible>true</azureCompatible>
  <dependencies />
  <components>
    <component type="JavaScript_Library">
      <javaScriptLibrary>
        <libraryName>Fancybox</libraryName>
        <fileName>jquery.fancybox.min.js</fileName>
        <objectName>fancybox</objectName>
        <cdnUrl>https://cdnjs.cloudflare.com/ajax/libs/fancybox/3.1.20/jquery.fancybox.min.js"</cdnUrl>
        <preferredScriptLocation>PageHead</preferredScriptLocation>
      </javaScriptLibrary>
    </component>
    <component type="JavaScriptFile">
      <jsfiles>
        <libraryFolderName>Fancybox</libraryFolderName>
        <jsfile>
          <name>jquery.fancybox.min.js</name>
        </jsfile>
      </jsfiles>
    </component>
  </components>
</package>
using DotNetNuke.Framework.JavaScriptLibraries;
...
JavaScript.RequestRegistration("Fancybox");
JavaScript.Register(this.Page);
<%@ Register TagPrefix="dnn" TagName="JavaScriptLibraryInclude" Src="~/admin/Skins/JavaScriptLibraryInclude.ascx" %>

<dnn:JavaScriptLibraryInclude runat="server" Name="Fancybox" />