【问题标题】:Can i use javascript to prevent Loading the same script over and over?我可以使用 javascript 来防止一遍又一遍地加载相同的脚本吗?
【发布时间】:2015-04-18 08:01:42
【问题描述】:

为自定义图库编写应用程序,所有脚本文件都放在每个图库文件夹内的资源文件夹中-

是否可以启用一个变量来阻止页面加载其本地 JavaScript 文件,而是从主页的资源文件夹加载?尽量避免硬编码。

基本上我真正想要的只是让我的脚本文件能够有一个可变的起始路径-IE

(script src="(path)load.js" type="text/javascript")(/script)

其中路径为空白“”或主主站点-“http://www.site.com/resources/”

其中一些文件是 CSS 文件,所以我不确定类方法是否能正常工作- 另外-有没有办法引用站点的根目录?类似于使用 ../ 但只是为了获取根 html 路径。

更多信息-----

我的布局是每个制作的画廊都是一个单独的文件夹-(例如,摄影、绘画、绘图等-都是单独的文件夹)。他们每个人都将在他们的文件夹中包含自己的资源。这样我就可以将 1 个画廊上传到一个网站,一切都会很好地打包。但是,如果我在一个网站上运行多个画廊,就像在投资组合网站上一样,每个页面都在加载自己的一组资源,这可能不是一个好主意。

资源是 - 缩略图、图像、xml(它们都特定于单个画廊),但它们也都有几个用于功能的 javascript 文件、一个 css 文件和一些使画廊可操作的图像(箭头和之类的)。

如果有多个画廊,我只想能够从根站点资源文件夹加载头文件中加载的脚本

【问题讨论】:

  • 您能在这里提供更多详细信息吗?哪个画廊脚本?您的文件夹结构等。一段 HTML 也可能就足够了。谢谢。
  • @zindel 他正在编写自定义画廊脚本。结构等和 html 无关,他想要一个如何在整个站点中仅加载一次脚本的示例。
  • 你有没有找到 Gazow 这个问题的答案?我有一个类似的,也在努力寻找解决方案。
  • @Daft 嗯,嗯,有点。我最终重写了整个应用程序以将所有内容放在同一个文件夹中 - 它使用 url 中的 # 动态运行以分隔画廊的实例。但要回答你的问题,我相信你可以做的是在文件的标题中调用你的脚本,并在请求获取根站点时使用 / 即: ---即使在子文件夹中,它仍然会调用主站点style.css,这也适用于javascript文件。
  • @Daft 使用变量或将脚本加载到头文件之外是个坏主意,因为加载脚本可能需要很长时间,然后您的函数将无法工作

标签: javascript


【解决方案1】:

您可以将所有代码放在一个类名下,例如我的数据.yourvariable

然后检查..

if (Mydata) { //your script has already been loaded }

这类似于 jQuery 对 $ 所做的事情

【讨论】:

【解决方案2】:
【解决方案3】:

也许你可以试试这样的:

index.html(或其他 html 文件)中您可以:

<html>
<head>
<!-- use this if you need custom location, omit for the default one -->
<script type="text/javascript">
var GALLERY_PATH = "/gallery/";
</script>
<!-- ------------------- -->
<script type="text" src="/gallery/gallery.js"></script>
</head>
<body>
...
</body>
</html>

gallery.js

var GALLERY_PATH = GALLERY_PATH || "http://mysite.com/default-gallery-location/";
document.write('<script type="text/javascript" src="' + GALLERY_PATH + '/js/_gallery.js"></script>')
document.write('<link rel="stylesheet" type="text/css" href="' + GALLERY_PATH + '/css/gallery.css">');
...

通过这种方式,您可以轻松地将所需的所有文件包含在 1-liner 中,并且所有文件都加载一次。希望它有所帮助,当然,如果我正确理解了这个问题;)

【讨论】:

    【解决方案4】:

    如果你发现用 javascript 处理它太难了,你可以从服务器上做。这取决于问题是双重调用,还是使用的 Kb 下载资源。

    在最后一种情况下,您可以简单地为您的 Web 服务器启用一些缓存驱动程序,例如 Varnish 或 MemCache。一旦你放置了一个缓存,你就不必再担心双重文件加载了。

    如果您想避免来自同一个 javascript 脚本的大量负载,您可以添加一个本地计数器,然后在它加载一次时将其设置为 1。您将编辑初始调用函数以测试它当前是否已加载,然后避免。

    如果你有很多 js 文件,并且只是想避免多次调用同一个资源,请使用会话 cookie 来存储计数器。

    【讨论】:

      猜你喜欢
      • 2011-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-20
      • 2019-07-05
      • 2014-02-11
      • 1970-01-01
      相关资源
      最近更新 更多