【问题标题】:Do I need to namespace my JavaScript code if it's in an <iframe>?如果我的 JavaScript 代码位于 <iframe> 中,我是否需要为其命名?
【发布时间】:2009-11-29 13:23:43
【问题描述】:

如果我编写了一些在

我做了一些谷歌搜索并看到了这个页面,但我无法真正理解他在这里所做的事情,或者它是否适用于我正在尝试确定/完成的事情。

http://dean.edwards.name/weblog/2006/11/sandbox/

我正在创建一个将存在于未知主机页面上的小部件;它是一个在页面上插入

基本上,我只是想避免与主机页面上的任何全局变量发生冲突;我不希望我在

如果使用

提前感谢您的任何指导。

【问题讨论】:

    标签: javascript html iframe namespaces


    【解决方案1】:

    因为每个的命名空间是分开的,应该没问题。考虑以下

    主机页面 JavaScript:

    Foo = {};
    Foo.bar = function(){ alert('hi!');}
    

    现在是 iframe JavaScript:

    Foo = {};
    Foo.bar = function(){ alert('yo!');}
    

    要让 iframe 与父级对话,它必须这样做

    window.parent.Foo.bar(); //Alerts 'hi!'
    Foo.bar(); //Alerts 'yo!'
    

    要让主机页面看到框架,它必须这样做:

    window.frames['nameOfFrame'].contentWindow.Foo.bar(); //Alerts 'yo!'
    Foo.bar(); //Alerts 'hi!'
    

    【讨论】:

    • 很好的解释!非常感谢,这回答了我的问题。
    【解决方案2】:

    如果我正确理解您的情况,iFrame 中的任何内容都应该超出页面其余部分的范围。但是,您可以使用parent 引用主页代码。

    var foo
    
    <iframe>
    var bar = parent.foo;
    </iframe>
    

    我知道这不是 iframe 的样子。只是想简化。

    【讨论】:

      【解决方案3】:

      正常使用,iframe中的脚本和主窗口中的脚本都是相互隔离的。

      ma​​in.html

      <!DOCTYPE html>
      <html><head>
      </head>
      <body>
      <script>
      function ale(){alert('test');}
      </script>
      <iframe src="fr.html"></iframe>
      
      </body></html>
      

      fr.html

      <input type="button" onclick="ale();" />
      

      请注意,当您打开 main.html 并单击 iframe 中的按钮时,出现 Javascript 错误,提示 ale();未定义将生成。这是因为它们是 2 个单独的文档。

      但是,您将能够使用 window.parent 节点从 iframe 访问父框架的文档对象。例如window.parent.getElementById('mainform')

      总结 无需在 iframe 中命名您的代码。

      【讨论】:

      • 谢谢,毛里斯!这就是我所怀疑的,但我想确定我没有遗漏或误解了什么。
      猜你喜欢
      • 2014-09-08
      • 2017-04-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-14
      • 1970-01-01
      • 1970-01-01
      • 2014-12-18
      • 1970-01-01
      相关资源
      最近更新 更多