是否可以从HTML文件中的特定脚本标签引用函数或对象?
Is it possible to refer to function or object from particular script tag in HTML file
假设我们在HTML文件中有以下代码:
<script id='tag-1'>
function foo(){
alert("this is foo-1");
}
</script>
<script id='tag-2'>
function foo(){
alert("this is foo-2");
}
</script>
<script id='tag-3'>
function foo(){
alert("this is foo-3");
}
</script>
是否可以从id为tag-2
的脚本标签调用功能foo
?我只是想知道是否有任何跨浏览器的解决方案?谢谢的家伙。
好的,我们有两个非常相关的建议-一个是我标记为接受答案的,另一个是在这篇文章下面的评论- @dfsq提出的。谢谢大家!!
不可能,没有eval()
是不可能的。
由于每个脚本块都由浏览器计算,因此该函数的先前版本将被覆盖。
您可以访问每个<script>
标记的文本上下文,但仅当它是内联的。访问<script src="...">
标记的源需要AJAX。
是的,这是完全可能的,但你应该使用文本/javascript以外的类型。
<script id='tag-1' type="myScriptHolder">
function foo(){
alert("this is foo-1");
}
</script>
<script id='tag-2' type="myScriptHolder">
function foo(){
alert("this is foo-2");
}
</script>
<script id='tag-3' type="myScriptHolder">
function foo(){
alert("this is foo-3");
}
</script>
<script>
$.globalEval($('#tag-1').text();
</script>
不,这不可能。同一窗口中的所有Javascript代码都共享相同的命名空间,因此您在示例中所做的只是重写foo
,这意味着最终您只有"foo-3"。
每个iframe都有自己的命名空间,但是这样使用iframe是没有意义的。
如果函数只有对应的脚本才需要,那么你可以将每个脚本包装在一个自执行的函数中,例如
(function() {
function foo(){
alert("this is foo-1");
}
})();
这将意味着foo
将无法从脚本外部访问,这显然可能会或可能不会为您工作,这取决于在哪里使用函数。
唯一的替代方法是为函数创建自己的命名空间,例如:
var namespace1 = {};
namespace1.foo = function foo() {...}
Javascript没有函数重载。每个具有相同名称(变量或函数)的下一个声明只是重新声明它并提供新的值。所以在这种情况下,标签-3中的函数将始终执行。
你想要的可能解决方案是
1. 给每个函数取不同的名字。
或
2. 如果您希望根据提供的参数以不同的方式调用函数。您可以检查函数内部的隐式参数对象,并根据该对象执行必要的操作。
第二个解的简单例子如下:
function foo(bar){
if(typeof bar==="number"){
//Do number specific stuff here
} else if(typeof bar==="string"){
//Do string specific stuff here
} else {
}
}
您可以实现一种相当常见的javascript名称空间技术。这将创建一个可用的新javascript对象,您可以通过调用CodeGuru.File1.Foo();
来引用它。var CodeGuru = CodeGuru || {};
var CodeGuru.File1 = CodeGuru.File1 || {};
(function(CodeGuru) {
CodeGuru.File1.Foo = function() {
//insert code
}
})(CodeGuru);
这样如何:
if (typeof (GenLib) == "undefined") GenLib = {};
GenLib.Tag1 = {};
GenLib.Tag2 = {};
GenLib.Tag3= {};
GenLib.Tag1.Foo = function () {
alert("this is foo-1");
};
GenLib.Tag2.Foo = function () {
alert("this is foo-2");
};
GenLib.Tag3.Foo = function () {
alert("this is foo-3");
};
var theOneYouWantNow = GenLib.Tag2; // Or Tag1 or Tag3, use if/switch/whatever here.
theOneYouWantNow.Foo();
- 引用对象中的通用值
- 如何在JavaScript中将字符串转换为函数引用
- 在<页眉>标签
- 当包含另一个asp文件时,是否也包含所有引用的样式和脚本页面
- Ckeditor-plugin:插入虚假元素add不情愿<p>标签前后
- 在动态创建的元素上获取对特定选择器的引用
- IIFE中的函数引用不可用
- 如何通过引用var Using DataTables来进行分页或排序
- 如何在创建键时引用来自同一对象的键
- Datatables:通过DOM数据源中的名称引用列
- 自引用回调
- 如何在 riotjs 中正确引用 each={} 的 'nested' 标签
- 如何在jsp标签中引用json数组的大小
- 是否可以从HTML文件中的特定脚本标签引用函数或对象?
- 没有事件在谷歌Chrome从SVG元素引用的使用标签
- 如何将标签附加到窗口引用
- 在浏览器中使用 ES6 模块时,我是否应该在“脚本”标签中引用文件
- 我如何得到一个引用我的HTML元标签
- 如何引用<a>标签'的内容进行远程和动态处理
- 引用标签