如何向动态插入的脚本传递参数
How to pass parameters to dynamically inserted SCRIPTs
关于如何参数化脚本已经写了很多。这里有一个很好的关于SO方法的概述。那篇文章和我找到的关于脚本参数化主题的所有其他内容都做出了以下两个假设之一:
-
SCRIPT元素在页面上是硬编码的,因此,当其代码运行时,它是页面上的最后一个SCRIPT元素,这使得它很容易被发现。然后是读取数据属性等的简单问题。
-
SCRIPT元素在某些方面是唯一可识别的,例如,
id
或src
文件名等
如果上述两个假设都不成立,而且不可能进行服务器端定制,而我们希望缓存脚本,那么参数化脚本的方法是什么?
作为一个例子,考虑一个异步场景,在页面的顶部窗口中,JavaScript可以在任何时间点的内容中添加任意数量的具有相同src
URL的SCRIPT元素,而其他不相关的DOM更改正在发生。每个脚本必须接收一个字符串参数。每个字符串参数值在该页的上下文中是唯一的。
在我看来,第一个假设总是正确的,但不是以你理解的方式…
从您提供的链接中,在本文中,我们有:
var scripts = document.getElementsByTagName('script');
var index = scripts.length - 1;
var myScript = scripts[index];
// myScript now contains our script object
这段代码甚至可以在你描述的上下文中工作。
假设我们有3个脚本标签,当第一个标签执行时,其他标签甚至还不存在,所以严格来说它是最后一个脚本标签:)
执行下面的代码,看看会发生什么:
<html>
<head>
<script id="script-a">
var scripts = document.getElementsByTagName('script');
var index = scripts.length - 1;
var myScript = scripts[index];
// myScript now contains our script object
document.writeln('<br>myScript.id = ' + myScript.id);
document.writeln('<br>scripts.length = ' + scripts.length);
document.writeln('<br>----------------');
</script>
<script id="script-b">
var scripts = document.getElementsByTagName('script');
var index = scripts.length - 1;
var myScript = scripts[index];
// myScript now contains our script object
document.writeln('<br>myScript.id = ' + myScript.id);
document.writeln('<br>scripts.length = ' + scripts.length);
document.writeln('<br>----------------');
</script>
</head>
</html>
对于最近附加的脚本也是如此,您只需要确保添加这些脚本的人确实附加了这些标记(作为head
标记的最后一个子)。
相关文章:
- 测试mongo脚本中是否存在参数
- 建议将包含不同参数的内联JS转换为外部脚本
- 如何参数化ajax TruClient脚本中的值
- 在GoogleWebApp脚本中,Cant似乎无法将多个参数从JS传递到HTML
- 如何在谷歌电子表格脚本中测试范围参数的类型
- ExternalInterface为我提供了在使用多个参数时停止脚本的选项.为什么?
- 谷歌应用脚本中的 UrlFetchApp.fetch 删除 url 参数
- 将参数传递到外部 JS 脚本的最佳方法
- 传递php字符串作为php脚本中调用的javascript函数的参数
- jQuery脚本,它搜索现有的查询参数并且不添加“"如果存在
- 如何使用参数调用java脚本函数,其中参数来自字符串变量
- Python CGI脚本,我无法通过'+'加号运算符作为参数
- 谷歌电子表格:为带有参数的按钮指定一个脚本
- PHP-如何让别人可以'不要更改url中的参数,也不要在刷新页面时再次运行脚本
- 如何将参数从python脚本传递到html文件并获得输出
- 将命令行参数发送到 npm 脚本
- 如何从批处理文件调用一个带有2个参数的java脚本函数,并将结果返回到环境变量
- JS从内部获取脚本参数
- 打字脚本:参数类型函数不能分配给参数类型函数
- 流星:使外部脚本参数响应