【问题标题】:Passing parameters to an external JS file that is called multiple times将参数传递给多次调用的外部JS文件
【发布时间】:2019-01-10 07:01:24
【问题描述】:

我使用的技术需要对同一个外部 JS 进行不同的调用。外部 JS 在 iframe 内调用并在那里创建输出。例如:

// Placement 1
<script async id="1234" src="external.js"></script>
// Placement 2    
<script async id="1235" src="external.js"></script>

我知道有各种相关的问题,但他们都假设外部文件只被调用一次,所以它不需要选择从哪个 ID 获取参数。

external.js 内部有没有办法知道哪个 ID 调用了它并使用了它的参数?例如,根据调用它的 ID 使用“this”或“that”:

<script async id="1234" src="external.js?use=this" ></script>
<script async id="1234" src="external.js?use=that" ></script>
// or
<script async id="1235" src="external.js" data-use="this"></script>
<script async id="1235" src="external.js" data-use="that"></script>
// etc. Even the MYLIBRARY way*

【问题讨论】:

  • 如果您一开始就无权访问该外部脚本,则无法实现此目的。
  • (“没办法”可能太绝对了;如果脚本启用了 CORS,您可以通过 AJAX 获取它,然后在您预先提供一些变量值的上下文中对其进行评估。 )

标签: javascript parameter-passing


【解决方案1】:

您正在寻找的内容与 JS 行为不一致。当您要求浏览器两次带入相同的资源(图像、视频或在本例中为 JS 文件)时,它只会带一次。但是你为什么要这样走?为什么不简单地使用

函数 a(someId) {...}

然后发送 1234 或 1235 或其他。我应该认为要简单得多。 顺便说一句 - 我从未听说过 data-use="this" 或 data-use="that"。那是一些新的 JS 语言吗?

【讨论】:

  • 如前所述,这是我使用的一种技术,因此我无法真正对其进行更改和转换。我只想在那里动态定义一些参数。我刚刚编辑了这个问题,以反映外部 JS 是通过 iframe 调用的,这可能会解释您的“只会带来一次”短语。
  • JS之上的技术和层数相当庞大。 JQuery、AngularJS、Backbone、React 仅举几例。不知道你用的是什么技术。所以……很抱歉,我无法在这里为您提供帮助。祝你好运!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多