首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以从HTML文件中的特定脚本标记引用函数或对象?

是否可以从HTML文件中的特定脚本标记引用函数或对象?
EN

Stack Overflow用户
提问于 2013-05-31 12:31:45
回答 6查看 468关注 0票数 10

假设HTML文件中有以下代码:

代码语言:javascript
复制
<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 foo从脚本标记调用函数tag-2?我只是想知道有没有跨浏览器的解决方案?谢谢各位。

好的,我们有两个非常相关的建议--一个是我标记的接受答案,另一个是这个帖子下面的严格评论--一个是@dfsq提议的。谢谢大家!

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2013-05-31 13:10:53

是的,这是完全可能的,但是您应该使用一种类型而不是text/javascript。

代码语言: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>
票数 3
EN

Stack Overflow用户

发布于 2013-05-31 12:34:18

不,如果不诉诸eval(),那是不可能的。

由于每个脚本块都是由浏览器计算的,函数的以前版本将被覆盖。

您可以访问每个<script>标记的文本上下文,但前提是它是内联的。访问<script src="...">标记的源需要AJAX。

票数 6
EN

Stack Overflow用户

发布于 2013-05-31 12:38:48

不,这不可能。同一个窗口中的所有Javascript代码共享相同的命名空间,因此在示例中所做的只是简单地覆盖foo,这意味着最终您只有"foo-3“。

iframes每个都有自己的名称空间,但是使用iframes这样的名称空间是没有意义的。

如果函数只需要相应的脚本,那么您可以将每个脚本封装在一个自动执行的函数中。

代码语言:javascript
复制
(function() {
  function foo(){
    alert("this is foo-1");
  }
})();

这意味着foo将无法从该脚本外部访问,这显然可能对您有用,也可能不适用于您,这取决于函数的使用位置。

唯一的其他选择是为函数创建自己的名称空间,例如:

代码语言:javascript
复制
var namespace1 = {};
namespace1.foo = function foo() {...}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16857365

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档